以编程方式确定Android应用程序是否具有系统级权限

Mar*_*ann 6 permissions android

我正在构建一个应用程序,用于收集和显示使用android.app.usage.UsageStatsManager系统服务的详细使用统计信息(科学!).此服务需要系统级权限android.permission.PACKAGE_USAGE_STATS.

用户需要在"设置"下明确授予系统级权限.当应用程序启动时,我想以编程方式确定该应用程序是否已被授予此权限.如果没有,我想显示如下提示:

权限提示

要检查应用是否具有所需权限,我通常会执行以下操作:

if (PackageManager.PERMISSION_DENIED == checkCallingOrSelfPermission("android.permission.PACKAGE_USAGE_STATS")) {
    // display prompt
}

// keep going
Run Code Online (Sandbox Code Playgroud)

提示启动Settings.ACTION_USAGE_ACCESS_SETTINGS意图:

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

App明显有许可

但是,即使应用程序已被授予此权限,也会checkCallingOrSelfPermission(String)始终返回PackageManager.PERMISSION_DENIED(也称-1)返回.

有没有一种特殊的方法来检查系统级权限,或者我做错了什么?