Я использую новый API UsageStatsManager
для получить текущее приложение переднего плана в Android 5.0 Lollipop.
Чтобы использовать этот API, пользователь должен включить приложение на экране Settings->Security->Apps with usage access
.
Я посылаю пользователя непосредственно на этот экран с этим намерением:
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
Теперь я хочу подтвердить, что пользователь включил мое приложение.
Я хотел сделать так, как будто я проверяю, что пользователь разрешил моему приложению использовать NotificationListenerService
, но я понятия не имею, что такое строковый ключ, даже если он существует.
Settings.Secure.getString(contentResolver, "enabled_notification_listeners");
// Tried Settings.ACTION_USAGE_ACCESS_SETTINGS as key but it returns null
Второй подход состоял в том, чтобы запросить статистику использования и проверить, возвращает ли он результаты (он возвращает пустой массив, когда приложение не включено), и оно работает большую часть времени, но иногда оно возвращает 0 результатов, даже когда мое приложение включено.
UsageStatsManager mUsageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");
long time = System.currentTimeMillis();
List stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 10, time);
if (stats == null || stats.isEmpty()) {
// Usage access is not enabled
}
Есть ли способ проверить, включено ли у моего приложения доступ к использованию?