Android Lollipop знать, если приложение как доступ Статистика использования
Начиная с Android Lollipop, у нас теперь есть API для доступа к статистике использования приложений. Однако вашему приложению должны быть предоставлены эти разрешения пользователем.
Я знаю, что для перенаправления пользователя к этим настройкам, используя Settings.ACTION_USAGE_ACCESS_SETTINGS.
Теперь мой вопрос: откуда вы знаете, что пользователь предоставил вам эти разрешения, чтобы вы могли перестать перенаправлять его в настройки?
Спасибо!
4 ответа
Вы можете просто запросить usagestats с ежедневным интервалом и временем окончания текущего времени, и если ничего не возвращается, это означает, что пользователь не предоставил разрешения
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean doIHavePermission(){
final UsageStatsManager usageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
final List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, System.currentTimeMillis());
return !queryUsageStats.isEmpty();
}
Дневной интервал с начальной датой 0 и конечной датой, по которой текущее время должно по крайней мере возвращать текущее использование. Поэтому он будет пустым, только если разрешения не предоставлены.
Проверьте этот ответ: Tomik's answer
Если вы спешите, вот решение;)
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static boolean usageAccessGranted(Context context) {
AppOpsManager appOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
android.os.Process.myUid(), context.getPackageName());
return mode == AppOpsManager.MODE_ALLOWED;
}
Я наткнулся на ту же проблему. На Samsung S5 Lollipop статистика использования не работала со следующим кодом:
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Однако статистика использования действительно существует. С помощью следующего кода можно открыть настройки безопасности:
Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.Settings$SecuritySettingsActivity"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Прокрутка вниз и есть статистика использования. Я также проверил журналы и нажав статистику использования, вы попадаете на SubActivity, который содержит фрагмент UsageStats. Я попробовал следующий код:
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.SubSettings"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Но получил исключение безопасности. Проблема в том, что они не помечали SubActivity как экспортированную, поэтому, насколько я знаю, невозможно напрямую запустить SubActivity (окно статистики использования). Единственное решение - перенести пользователя в настройки Securiy, а затем попросить его вручную перейти к просмотру статистики использования и включить приложение.
Если кто-то найдет лучшее решение, это будет здорово!
См. ActivityNotFoundException в Lollipop при попытке запуска действия с намерением android.settings.USAGE_ACCESS_SETTINGS для лучшего способа, так как с помощью метода мы не можем определить, есть ли просто нет статистики для временного интервала