Wie überprüfe ich, ob die Berechtigung "android.permission.PACKAGE_USAGE_STATS" erteilt wurde?

Hintergrun

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 Proble

Ich 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 habe

Sie 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 Frag

Wie komme ich nicht zum richtigen Ergebnis der Berechtigungsprüfung?

Was sollte getan werden, um es besser zu überprüfen?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage