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 для лучшего способа, так как с помощью метода мы не можем определить, нет ли простой статистики для временного интервала