背景
我试图获得应用程序发布的统计数据,在Lollipop它可以通过使用UsageStatsManager类,这样(原始帖子here):
表现:
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions"/>
打开将让用户确认为您授予此权限的活动:
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
获取统计信息,聚合:
private static final String USAGE_STATS_SERVICE ="usagestats"; // Context.USAGE_STATS_SERVICE);
...
final UsageStatsManager usageStatsManager=(UsageStatsManager)context.getSystemService(USAGE_STATS_SERVICE);
final Map queryUsageStats=usageStatsManager.queryAndAggregateUsageStats(fromTime,toTime);
问题
我似乎不能检查是否授予您需要的权限(“android.permission.PACKAGE_USAGE_STATS”)。我迄今为止所尝试的总是返回它被拒绝。
代码工作,但权限检查不能很好地工作。
我试过的
您可以使用以下任一方式检查授予的权限:
String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getContext().checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
或这个:
String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getPackageManager().checkPermission(permission,getPackageName())== PackageManager.PERMISSION_GRANTED;
两者总是返回它被拒绝(即使我已经授予作为用户的权限)。
看看UsageStatsManager的代码,我试图想出这个解决方法:
UsageStatsManager usm=(UsageStatsManager)getSystemService("usagestats");
Calendar calendar=Calendar.getInstance();
long toTime=calendar.getTimeInMillis();
calendar.add(Calendar.YEAR,-1);
long fromTime=calendar.getTimeInMillis();
final List queryUsageStats=usm.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,fromTime,toTime);
boolean granted=queryUsageStats!=null&&queryUsageStats!=Collections.EMPTY_LIST;
它工作,但它仍然是一个解决方法。
问题
我如何得到正确的权限检查结果?
应该做什么来检查它更好?