为什么Android 6上没有授予GCM权限?

and*_*per 5 permissions android google-cloud-messaging android-6.0-marshmallow

背景

我正在尝试调查办公室的应用程序需要更改其权限,以便很好地支持Android 6.

问题

我发现哪个权限需要确认,哪个不是,除了一个:

<uses-permission android:name=".permission.C2D_MESSAGE"/>
Run Code Online (Sandbox Code Playgroud)

看来这个权限在我找不到的任何地方都没有提到,因为它没有被自动授予,但我无法找到用户可以将其作为确认启用的位置.

我尝试了什么

为了找到默认授予的权限,哪些不是,我只是调用了这段代码:

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

电话:

checkPermissionsOfApp(getPackageName());
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,它崩溃了有问题的权限,但是当使用ContextCompat.checkSelfPermission时,它表示它没有被授予.

这个问题

怎么会这样?我如何授予应用程序此权限?它在哪里提到过?

Gre*_*eek 1

2015年10月更新的文档仍然表明需要签名权限。

另请参阅未收到来自 GCM (Android) 的推送通知

正如 @CommonsWare 提到的,这似乎不是新的运行时权限检查的一部分,或者至少不被视为“危险”权限,因此应该自动授予。