背景
我正在调查一款办公室应用程序需要更改哪些权限,以便良好支持Android 6。
问题
我已经确定了哪些权限需要确认,哪些不需要,但还有一个问题:
<uses-permission android:name=".permission.C2D_MESSAGE"/>
看起来我在寻找的权限没有被自动授予,但我找不到用户可以启用它作为确认的地方。
我尝试过的方法
为了找出哪些权限是默认授予的,哪些权限不是,默认调用了以下代码:
private void checkPermissionsOfApp(String packageName) {
PackageManager pm = getPackageManager();
try {
final ApplicationInfo applicationInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
Log.d("AppLog", "Listing all permissions of app with PackageName: " + applicationInfo.packageName);
PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName, PackageManager.GET_PERMISSIONS);
//Get Permissions
String[] requestedPermissions = packageInfo.requestedPermissions;
if (requestedPermissions != null) {
for (String permission : requestedPermissions) {
boolean permissionGranted = pm.checkPermission(permission, packageName) == PackageManager.PERMISSION_GRANTED;
Log.d("AppLog", "permission:" + permission + " permissionGranted:" + permissionGranted);
}
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
}
并且调用:
checkPermissionsOfApp(getPackageName());
使用上述代码时,对于有问题的权限会导致崩溃,但是当使用 ContextCompat.checkSelfPermission 时,它会显示该权限未被授予。
问题
这是怎么回事? 我如何授予应用程序此权限? 是否在任何地方都有提到?