19

如何从代码中检查 manifest.xml 中的特定权限?如果缺少我的应用程序所需的某些权限,我想抛出一些异常。

例如,我知道 android 在启动使用 GPS 的特定活动时也会抛出异常,但我需要检查清单并在应用程序本身启动时抛出异常FINE_LOCATIONCOARSE_LOCATION这不仅适用于位置访问,还适用于其他权限。

任何的意见都将会有帮助。

4

2 回答 2

37

您可以使用PackageManager检查是否授予特定权限的权限。例如

    PackageManager pm = getPackageManager();
    if (pm.checkPermission(permission.FINE_LOCATION, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
        // do something
    } else {
        // do something
    }
于 2011-11-28T07:29:56.827 回答
13

您可以使用以下命令在运行时读取可用<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();
}
于 2016-11-03T05:04:12.063 回答