【发布时间】:2014-11-30 15:46:31
【问题描述】:
我在 Android 5.0 Lollipop 中使用新的 UsageStatsManager API 到 get current foreground application。
要使用此 API,用户必须在 Settings->Security->Apps with usage access 屏幕中启用应用程序。
我用这个 Intent 将用户直接发送到这个屏幕:
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
现在,我想验证用户是否启用了我的应用程序。
我想这样做,就像我验证用户启用我的应用程序以使用 NotificationListenerService 但我不知道 String 键是什么,如果它甚至存在的话。
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
}
有没有办法检查我的应用程序是否启用了使用访问权限?
【问题讨论】:
-
lluz:你知道如何自动打开吗?
-
@user8430 它写在 OP 中。 startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));您只能将用户发送到屏幕,不能自动为他启用。
-
我明白了。谢谢你。我发现另一个问题是当用户正确选择应用程序时我们如何关闭 Intent。因为,在我选择应用程序后,我必须按返回按钮才能返回我的 Activity。当用户选择目标应用程序时,我正在寻找一种自动返回活动的自动方法
-
@user8430 在将用户发送到设置屏幕之前使用布尔标志并检查他是否返回 onResume -> 检查是否授予权限。
-
我在stackoverflow.com/questions/39651734/…发现一个人的问题与我的问题相同