Android M - GoogleAccountCredential setSelectedAccount 不起作用 - 名称不能为空

Android M - GoogleAccountCredential setSelectedAccount doesn't work - name must not be null

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

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

调试时你可以看到我的变量 accountName 不为空或 null,我调用 .setSelectedAccountName(),但是正如你在调试中看到的 window,字段在GoogleAccountCredential 仍然为空。

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

<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 权限(根据 https://developer.android.com/preview/features/runtime-permissions.html#normal ),但其他两个权限是对 M-Preview 的 "unknown"。所以也许,就是这样?

android.permission.GET_ACCOUNTS 有 protectionLevel:dangerous 并且现在是联系人权限组的一部分,这意味着您应该在运行时使用新的 Activity.requestPermissions()

请求它

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

我遇到了同样的问题。

使用 setSelectedAccount() 而不是 setSelectedAccountName()

 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"));

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