Android M-GoogleAccountCredential setSelectedAccount不';t工作-名称不能为空

Android M-GoogleAccountCredential setSelectedAccount不';t工作-名称不能为空,android,google-play-services,android-6.0-marshmallow,Android,Google Play Services,Android 6.0 Marshmallow,在Android M-Preview上,GoogleAccountCredential.setSelectedAccount似乎不起作用 调试时,我注意到调用该方法后,对象的selectedAccount和accountName字段仍然为空 在调试过程中,您可以看到我的变量accountName不是空的或null,我调用.setSelectedAccountName(),但正如您在调试窗口中看到的,GoogleAccountCredential中的字段仍然为null 我认为这可能与某些权限有

在Android M-Preview上,GoogleAccountCredential.setSelectedAccount似乎不起作用

调试时,我注意到调用该方法后,对象的
selectedAccount
accountName
字段仍然为空

在调试过程中,您可以看到我的变量
accountName
不是空的或null,我调用
.setSelectedAccountName()
,但正如您在调试窗口中看到的,GoogleAccountCredential中的字段仍然为null

我认为这可能与某些权限有关?在我的清单上,我声明了以下权限:

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


我知道您在M上免费获得的
GET_ACCOUNTS
权限(根据),但其他两个权限对M-Preview来说“未知”。那么,也许是这样

android.permission.GET_ACCOUNTS
具有protectionLevel:危险,现在是联系人权限组的一部分,这意味着您应该在运行时使用新的
活动.requestPermissions()请求它。

只有这样,您才能与设备上其他应用程序创建的帐户进行交互。

我也有同样的问题

使用setSelectedAccount()而不是setSelectedAccountName()


设置要设置为电子邮件的帐户,并且可以将包名称作为第二个参数

我发誓,M是如此的可爱,它让我毛骨悚然。祝你好运,伙计!如果您查看文档,android.permission.GET_帐户将列在正常权限中。不管怎么说,我只是试着申请那个许可,现在它起作用了。我假设该权限在正常列表中。该特定更改是在预览2和预览3之间进行的,一定有人错过了文档中的这一点。我看看能不能把它修好。同时,您可以使用:adb shell pm list permissions-g-fThanks获取所有权限组和保护级别的列表。关于此许可被视为危险的原因的任何信息?另外,当我们请求此权限时,会出现一个对话框,上面写着“允许应用程序XYZ访问您的联系人”,这真的很糟糕。我不想访问他们的联系人,只是他们的帐户名。。。我想很多用户都会害怕。
 mCredential = GoogleAccountCredential.usingOAuth2(
                getApplicationContext(), Arrays.asList(SCOPES))
                .setBackOff(new ExponentialBackOff());

        // to set accountName manually instead of prompting user to select it
        mCredential.setSelectedAccount(new Account("xyz@gmail.com", "com.android.example"));