如何从代码中检查manifest.xml中的特定权限?如果缺少某些我的应用程序必需的权限,我想抛出一些异常。
例如,FINE_LOCATION
和COARSE_LOCATION
我知道android也会在启动使用GPS的特定活动时抛出异常,但我需要检查清单并在应用程序本身启动时抛出异常。这不仅适用于位置访问,还适用于其他权限。
任何建议都会有所帮助。
答案 0 :(得分:33)
您可以使用 PackageManager 检查是否授予了对特定权限的权限。例如
PackageManager pm = getPackageManager();
if (pm.checkPermission(permission.FINE_LOCATION, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
// do something
} else {
// do something
}
答案 1 :(得分:8)
您可以使用以下内容在运行时阅读可用的<uses-permission>
标记。在较旧的Android版本和Android 6和7上进行测试
PackageManager pm = getPackageManager();
try
{
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS);
String[] requestedPermissions = null;
if (packageInfo != null) {
requestedPermissions = packageInfo.requestedPermissions;
}
if (requestedPermissions != null && requestedPermissions.length > 0)
{
List<String> requestedPermissionsList = Arrays.asList(requestedPermissions);
ArrayList<String> requestedPermissionsArrayList = new ArrayList<String>();
requestedPermissionsArrayList.addAll(requestedPermissionsList);
Log.i(ExConsts.TAG, ""+requestedPermissionsArrayList);
}
}
catch (PackageManager.NameNotFoundException e)
{
e.printStackTrace();
}