Como verificar se a permissão "android.permission.PACKAGE_USAGE_STATS" é concedida?

fundo

Estou tentando obter estatísticas lançadas por aplicativos, e no Lollipop é possível usando oUsageStatsManager classe, como tal (postagem originalaqui):

manifesto:

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

abrindo a atividade que permitirá ao usuário confirmar, concedendo a você esta permissão:

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));

obtendo as estatí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);
O problema

Não consigo verificar se a permissão necessária ("android.permission.PACKAGE_USAGE_STATS") é concedida. Tudo o que tentei até agora sempre retorna que é negado.

O código funciona, mas a verificação de permissão não funciona bem.

O que eu tentei

você pode verificar se há uma permissão concedida usando o seguinte:

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

ou isto:

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

Os dois sempre retornaram que foram negados (mesmo quando concedi a permissão como usuário).

Observando o código do UsageStatsManager, tentei apresentar esta solução alternativa:

      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;

Funcionou, mas ainda é uma solução alternativa.

A questão

Como é que não obtenho o resultado correto da verificação de permissão?

O que deve ser feito para verificar melhor?

questionAnswers(4)

yourAnswerToTheQuestion