Android Lollipop知道app是否可以访问Usage Stats

lag*_*age 7 android usage-statistics android-recents android-5.0-lollipop

自Android Lollipop以来,我们现在拥有一个用于访问应用使用情况统计数据的API.但是,您的应用必须由用户授予这些权限.

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

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

谢谢!

小智 7

您可以简单地使用每日间隔和结束时间查询当前时间的使用状态,如果没有返回任何内容,则表示用户未授予权限

@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();
}
Run Code Online (Sandbox Code Playgroud)

具有开始日期0和结束日期的每日间隔当前时间必须至少返回今天的使用情况.因此,仅当未授予权限时,它才会为空.


Вла*_*ков 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;
    }
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

10830 次

最近记录:

9 年,7 月 前