我正在构建一个应用程序,用于收集和显示使用android.app.usage.UsageStatsManager
系统服务的详细使用情况统计信息(科学!)。此服务需要系统级权限android.permission.PACKAGE_USAGE_STATS
。
用户需要在“设置”下明确授予系统级权限。当应用程序启动时,我想以编程方式确定该应用程序是否已被授予此权限。如果没有,我想显示如下提示:
要检查应用是否具有所需权限,我通常会执行以下操作:
if (PackageManager.PERMISSION_DENIED == checkCallingOrSelfPermission("android.permission.PACKAGE_USAGE_STATS")) {
// display prompt
}
// keep going
提示会启动Settings.ACTION_USAGE_ACCESS_SETTINGS
意图:
final Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
但是,即使应用程序已获得此权限,对checkCallingOrSelfPermission(String)
的调用也会一直返回PackageManager.PERMISSION_DENIED
(a.k.a -1
)。
是否有检查系统级权限的特殊方法,或者我是否在做其他错误的操作?