Como verificar se a permissão "android.permission.PACKAGE_USAGE_STATS" é concedida?
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 problemaNã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 tenteivocê 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ãoComo é que não obtenho o resultado correto da verificação de permissão?
O que deve ser feito para verificar melhor?