7

自 Android Lollipop 以来,我们现在有了一个用于访问应用程序使用统计信息的 API。但是,您的应用必须由用户授予这些权限。

我知道使用 Settings.ACTION_USAGE_ACCESS_SETTINGS 将用户重定向到这些设置。

现在,我的问题是您如何知道用户已授予您这些权限,以便您可以停止将他重定向到设置。

谢谢!

4

4 回答 4

7

您可以使用当前时间的每日间隔和结束时间简单地查询 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 和结束日期为当前时间的每日间隔必须至少返回今天的使用情况。因此只有在未授予权限时才会为空。

于 2014-12-06T18:46:16.123 回答
7

检查这个答案: Tomik的答案

如果你快点,这里有解决方案;)

    @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;
    }
于 2015-09-25T09:13:36.877 回答
2

我偶然发现了同样的问题。在三星 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 标记为export,所以据我所知,它不可能直接启动 SubActivity (使用统计窗口)。唯一的解决方案是将用户带到 Securiy 设置,然后他们告诉他手动转到使用情况统计视图并启用应用程序。

如果有人找到更好的解决方案,那就太好了!

于 2015-04-19T15:53:46.113 回答
1

See ActivityNotFoundException in Lollipop when trying to launch activity with intent android.settings.USAGE_ACCESS_SETTINGS for a better way, since with method we cannot discern whether there are simple no stats for the time interval

于 2015-02-19T15:37:46.373 回答