请求 PACKAGE_USAGE_STATS 的权限

Posted

技术标签:

【中文标题】请求 PACKAGE_USAGE_STATS 的权限【英文标题】:Request permission on PACKAGE_USAGE_STATS 【发布时间】:2016-08-17 16:03:35 【问题描述】:

我想检查用户是否已授予我的应用程序使用 PACKAGE_USAGE_STATS 的权限。我目前正在做的是:

// Control that the required permissions is instantiated!
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.PACKAGE_USAGE_STATS) != PackageManager.PERMISSION_GRANTED) 
    ActivityCompat.requestPermissions(this, new String[]Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.PACKAGE_USAGE_STATS, MULTIPLE_PERMISSION_GRANTED);

我已经按照 android 开发者部分中的描述实现了 requestPermissions,它对 ACCESS_FINE_LOCATION 工作得很好。

但是当我的应用程序请求权限时,它只显示 ACCESS_FINE_LOCATION 权限而不是 PACKAGE_USAGE_STATS 谁能解释为什么?如果是这样,请给出我如何做到的解决方案?

我希望这两个权限都显示在这样的对话框中:

【问题讨论】:

【参考方案1】:

不幸的是,您不能像使用危险权限那样在运行时请求PACKAGE_USAGE_STATS。用户需要通过设置应用程序手动授予权限,如UsageStatsManager documentation 中所述:

此 API 需要权限 android.permission.PACKAGE_USAGE_STATS,这是系统级别的 权限,不会授予第三方应用程序。然而, 声明权限意味着使用 API 和用户的意图 的设备可以通过设置应用程序授予权限。

您可以使用此代码直接打开Apps with usage access活动:

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));

Here您可以找到一个基本应用示例,展示如何使用应用使用统计 API。

【讨论】:

是的,我已经这样做了。我只是对我的用户不得不打开设置应用程序感到恼火。但感谢您澄清这一点。

以上是关于请求 PACKAGE_USAGE_STATS 的权限的主要内容,如果未能解决你的问题,请参考以下文章

在授予权限之前调用的请求权限方法

求带权为13456的最优2元树,并计算它的权

离散数学权值怎么算

权值怎么算离散数学

LVS-算法

最小生成树的prim算法 边的权值为啥不能为负值