请求PACKAGE_USAGE_STATS的权限

Ano*_*ous 4 java android android-permissions

我想检查用户是否已授予我的应用程序使用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);
}
Run Code Online (Sandbox Code Playgroud)

我已经按照Android Developer部分的描述实现了requestPermissions,它对ACCESS_FINE_LOCATION工作正常.

但是,当我的应用程序请求权限时,它只显示ACCESS_FINE_LOCATION权限而不是PACKAGE_USAGE_STATS,任何人都可以解释原因吗?如果是这样,给我一个解决方案,我该怎么做?

我希望这两个权限都显示在如下对话框中: 在此输入图像描述

Mat*_*ini 8

遗憾的是,您不能PACKAGE_USAGE_STATS像在危险权限下那样在运行时请求.用户需要通过Settings应用程序手动授予权限,如UsageStatsManager 文档中所述:

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

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

startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
Run Code Online (Sandbox Code Playgroud)

在这里,您可以找到一个基本应用程序的示例,该应用程序显示了如何使用App使用统计API.