¿Cómo verificar si se otorga el permiso "android.permission.PACKAGE_USAGE_STATS"?

Antecedentes

Estoy tratando de obtener estadísticas lanzadas por la aplicación, y en Lollipop es posible usando elUsageStatsManager clase, como tal (publicación originalaquí):

manifiesto:

<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions"/>

abriendo la actividad que le permitirá al usuario confirmar que le da este permiso:

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));

obteniendo las estadísticas, agregadas:

 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);
El problema

Parece que no puedo verificar si el permiso que necesita ("android.permission.PACKAGE_USAGE_STATS") está otorgado. Todo lo que he intentado hasta ahora siempre devuelve que se niega.

El código funciona, pero la verificación de permisos no funciona bien.

Lo que he intentado

puede verificar si se otorga un permiso usando esto:

String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getContext().checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;   

o esto:

String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getPackageManager().checkPermission(permission,getPackageName())== PackageManager.PERMISSION_GRANTED;   

Ambos siempre respondieron que se le había denegado (incluso cuando otorgué el permiso como usuario).

Mirando el código de UsageStatsManager, he intentado encontrar esta solución:

      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;

Funcionó, pero sigue siendo una solución.

La pregunta

¿Cómo es que no obtengo el resultado correcto de la verificación de permisos?

¿Qué se debe hacer para verificarlo mejor?

Respuestas a la pregunta(4)

Su respuesta a la pregunta