Wie überprüfe ich, ob die Berechtigung "android.permission.PACKAGE_USAGE_STATS" erteilt wurde?
Ich versuche, eine App-gestartete Statistik zu erhalten, und bei Lollipop ist dies mit dem @ möglic UsageStatsManager Klasse, als solche (OriginalbeitragHie):
Manifest
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions"/>
Öffnen der Aktivität, mit der der Benutzer bestätigen kann, dass Sie diese Berechtigung erhalten haben:
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
getting the stats, aggregiert:
private static final String USAGE_STATS_SERVICE ="usagestats"; // Context.USAGE_STATS_SERVICE);
...
final UsageStatsManager usageStatsManager=(UsageStatsManager)context.getSystemService(USAGE_STATS_SERVICE);
final Map<String,UsageStats> queryUsageStats=usageStatsManager.queryAndAggregateUsageStats(fromTime,toTime);
Das ProbleIch kann scheinbar nicht prüfen, ob die von Ihnen benötigte Berechtigung ("android.permission.PACKAGE_USAGE_STATS") erteilt wurde. Alles was ich bisher ausprobiert habe kommt immer wieder, dass es verweigert wird.
Der Code funktioniert, aber die Berechtigungsprüfung funktioniert nicht gut.
Was ich versucht habeSie können folgendermaßen prüfen, ob eine Berechtigung erteilt wurde:
String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getContext().checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
oder dieses
String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getPackageManager().checkPermission(permission,getPackageName())== PackageManager.PERMISSION_GRANTED;
Both hat immer zurückgegeben, dass es abgelehnt wurde (auch wenn ich die Erlaubnis als Benutzer erteilt habe).
Nach dem Code von UsageStatsManager habe ich versucht, folgende Problemumgehung zu finden:
UsageStatsManager usm=(UsageStatsManager)getSystemService("usagestats");
Calendar calendar=Calendar.getInstance();
long toTime=calendar.getTimeInMillis();
calendar.add(Calendar.YEAR,-1);
long fromTime=calendar.getTimeInMillis();
final List<UsageStats> queryUsageStats=usm.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,fromTime,toTime);
boolean granted=queryUsageStats!=null&&queryUsageStats!=Collections.EMPTY_LIST;
Es hat funktioniert, aber es ist immer noch eine Problemumgehung.
Die FragWie komme ich nicht zum richtigen Ergebnis der Berechtigungsprüfung?
Was sollte getan werden, um es besser zu überprüfen?