我正在尝试检查外部应用程序(即不是我正在编写的应用程序,而是在调试设备上运行的另一个应用程序)是否具有绘制权限。但是,无论我使用哪种方法,我总是得到" false" 作为答案,因为我确定该应用可以抽取其他应用。事实上,我不仅通过“设置”界面明确授予了权限,而且我实际上目睹了它执行视图叠加。
这是我使用的第一种方法:
pm.checkPermission(Manifest.permission.SYSTEM_ALERT_WINDOW, "target.package")
这是我使用的第二种方法(packageInfo是与" target.package&#34相关联的PackageInfo对象):
boolean requestedPermissionGranted = false;
for (int i = 0; i < packageInfo.requestedPermissions.length; ++i) {
if (packageInfo.requestedPermissions[i].equals(Manifest.permission.SYSTEM_ALERT_WINDOW)) {
requestedPermissionGranted =
(packageInfo.requestedPermissionsFlags[i] & PackageInfo.REQUESTED_PERMISSION_GRANTED) != 0;
break;
}
}
hasPermission = requestedPermissionGranted;
两个表达式都返回false。顺便说一下,我确认packageInfo.requestedPermissions
实际上包含SYSTEM_ALERT_WINDOW
。
我搜索得很远,但我找不到任何可以回答我怀疑的话题。我只是设法找到关于如何查看应用拥有权限的帖子,我不对此感兴趣。
P.S:我无法通过getRuntime()。exec()使用shell并列出活动窗口,因为我被许可拒绝了。