3 回答
![?](http://img1.sycdn.imooc.com/533e4c3300019caf02000200-100-100.jpg)
TA贡献1921条经验 获得超9个赞
AOSP示例代码中实际上包含一个示例应用程序:developers/samples/android/system/AppUsageStatistics/
它包括UsageStats在应用程序中使用所需的所有位:
在中声明许可 AndroidManifest.xml
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
显示设置以授予访问权限 UsageStatsManager
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
查询UsageStatsManager统计信息。
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -1);
List<UsageStats> queryUsageStats = mUsageStatsManager
.queryUsageStats(intervalType, cal.getTimeInMillis(),
System.currentTimeMillis());
创建基于以下内容的应用列表 UsageStats
总结并应用于您的示例:
您似乎正确地请求并授予了访问使用情况统计信息的权限。
您正确获得UsageStats系统服务。
但是,您查询的时间段很短:自纪元以来,参数beginTime和endTime以毫秒为单位。Calendar实例可以通过提供该值getTimeinMillis()。你错误地做的是只给一年的数字(2015和2017如果你运行程序今天)。这些值被解释为自纪元以来的毫秒数,因此间隔只有2毫秒长,是1970年的某个时间。
代替您发布的以下代码片段,您应该复制我在下面发布的示例:
错误:
final int currentYear=Calendar.getInstance().get(Calendar.YEAR);
final List<UsageStats> queryUsageStats=usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,currentYear-2,currentYear);
正确:
final long currentTime = System.currentTimeMillis(); // Get current time in milliseconds
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, -2); // Set year to beginning of desired period.
final long beginTime = cal.getTimeInMillis(); // Get begin time in milliseconds
final List<UsageStats> queryUsageStats=usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY, beginTime, currentTime);
- 3 回答
- 0 关注
- 1518 浏览
添加回答
举报