无法获得Android M的GET_ACCOUNTS权限

时间:2016-11-03 22:29:39

标签: android android-6.0-marshmallow android-permissions

我的AndroidManifest:

<uses-permission android:name="android.permission.GET_ACCOUNTS"/>

<uses-permission android:name="android.permission.READ_CONTACTS"/>

<uses-permission android:name="android.permission.WRITE_CONTACTS"/>

我的build.gradle: classpath 'com.android.tools.build:gradle:2.1.2'

我的活动onCreate()

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.GET_ACCOUNTS)
                    != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(AnyMailMainActivity.this,
                            new String[]{Manifest.permission.GET_ACCOUNTS},
                            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
            } else {
                mContactPermissionGranted = true;
            }
        } else {
            mContactPermissionGranted = true;
        }

我的onRequestPermissionsResult()

```

@Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    mContactPermissionGranted = true;
                } else {
                    mContactPermissionGranted = false;
                }
                return;
            }
        }
    }

```

尽管如此,我还没有收到请求联系人对话框&#39;没有获得GET_ACCOUNTS的任何许可。 目的是从Android M及更高版本的设备获取谷歌电子邮件,而不显示谷歌的帐户选择器。就像我们在Android M之前获取帐户列表一样。

1 个答案:

答案 0 :(得分:0)

您是否测试过您是否已经可以访问该帐户,或者您是否基于没有对话框进行假设?

GET_ACCOUNTS权限位于联系人群组下,因此,如果您已在该群组中授予了其他权限(READ_CONTACTSWRITE_CONTACTS),则您已拥有帐户访问权限。

测试时需要注意的另一件事 - 文档现在声明:

  

如果应用程序共享管理帐户的身份验证器的签名,则不需要“GET_ACCOUNTS”权限来读取有关该帐户的信息。