PackageInfo:requestedPermissions vs permissions

时间:2016-09-10 02:31:34

标签: android permissions

requestedPermissionspermissions之间的区别是什么?

PackageInfo _pi = getPackageManager().getPackageInfo(this.getPackageName(), 
                                               PackageManager.GET_PERMISSIONS);

// permissions
PermissionInfo[] _permissions = _pi.permissions;

// requestedPermissions
String[] _requestedPermissions = _pi.requestedPermissions;

是关于应用程序的权限和操作系统的权限吗?

由于

2 个答案:

答案 0 :(得分:2)

与文档中一样

  

public PermissionInfo []

     

<permission>下包含的所有<manifest>标记的数组,如果是,则为null   没有。

  

int [] requestedPermissions

     

<uses-permission>下包含的所有<manifest>标记的数组,或null   如果没有。

所以permissionInfo会在清单中的attributes标记中包含manifest,例如

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.androidtest"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name">

requstedPermissions将返回<uses-permission>标记中的权限,例如

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CAMERA" />

答案 1 :(得分:0)

如果您想要在清单中预先检查所有权限,则必须使用以下代码:

private bool PermissionInManifest (string permission)
{
    var permissions = this.Activity.PackageManager.GetPackageInfo(this.Activity.PackageName, PackageInfoFlags.Permissions);
    var requestedPermissions = permissions.RequestedPermissions.ToList();
    return requestedPermissions.Contains(permission);
}

如果您想要用户授予的检查权限,您可以使用:

private bool PermissionGranted (string permission)
{
    return this.Activity.PackageManager.CheckPermission (permission, this.Activity.PackageName) == Permission.Granted;
}