Android Lollipop знать, если приложение как статистика использования доступа
начиная с Android Lollipop, у нас теперь есть API для доступа к статистике использования приложений. Однако пользователь должен предоставить приложению эти разрешения.
Я знаю, что для перенаправления пользователя на эти параметры, используя настройки.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 и датой окончания текущее время должно по крайней мере возвращать сегодняшнее использование.Таким образом, он будет пустым, только если разрешения не предоставляются.
проверьте этот ответ: ответ Томика
Если вы спешите, вот решение ;)
@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);
прокрутите вниз и есть статистика использования. Я также проверил журналы и, нажав статистику использования, вы направляетесь к Подактивности, которая содержит фрагмент 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 (окно статистики использования). Единственное решение-взять пользователя в настройки Securiy, и они скажут ему вручную перейти к просмотру статистики использования и включить приложение.
Если кто-то найдет лучшее решение, было бы здорово!
посмотреть ActivityNotFoundException в Lollipop при попытке запустить действие с намерением android.настройки.USAGE_ACCESS_SETTINGS для лучшего способа, так как с помощью метода мы не можем определить, нет ли простой статистики для временного интервала