有没有办法从代码中检查清单权限?

rDr*_*oid 15 android android-manifest android-permissions

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

例如,FINE_LOCATION并且COARSE_LOCATION我知道Android也将扔在推出即使用GPS的具体activiy的例外,但我需要检查清单并在启动应用程序本身的抛出异常.这不仅适用于位置访问,还适用于其他权限.

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

aNi*_*aNi 33

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

    PackageManager pm = getPackageManager();
    if (pm.checkPermission(permission.FINE_LOCATION, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
        // do something
    } else {
        // do something
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果将targetSdkVersion设置为23,则上述解决方案将无法在Android 6.0上运行 (6认同)

MyF*_*Lab 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();
}
Run Code Online (Sandbox Code Playgroud)