GoogleAccountCredential setSelectedAccountName但仍为null

时间:2017-04-19 04:32:51

标签: android android-permissions google-authentication google-oauth2 google-account

即使设置后,帐户名也为空。

我已经看过this answer,但我确实在清单中都有<android.support.v7.widget.AppCompatRadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/quiz_radiobutton" /> 权限,并且在运行时受到保护。

以下设置正在Pixel XL仿真器API 25(Android 7.1.1)上运行。

清单

GET_ACCOUNTS

活动

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

logcat的

private void queryAPI() {
    if (mCredential.getSelectedAccountName() == null) {
        if (checkSelfPermission(Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[] {Manifest.permission.GET_ACCOUNTS}, RCP_AUTH_CRED);
            return;
        }

        mCredential.setSelectedAccountName("test@gmail.com");
        Log.d(TAG, "queryAPI: account name " + mCredential.getSelectedAccountName());
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case RCP_AUTH_CRED:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                queryAPI();
            } else {
                Log.d(TAG, "onRequestPermissionsResult: " + Integer.toString(grantResults[0]));
            }
            break;
    }
}

2 个答案:

答案 0 :(得分:2)

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

将您的Gmail帐户作为第一个参数,将您的包名称作为第二个参数。

答案 1 :(得分:1)

这是Google帐户&#34; test@gmail.com"在设备帐户中设置?

首先,您需要在要测试的设备上设置设置/帐户/添加帐户,以设置要在应用中使用的Google帐户。仅仅通过帐户名称是不够的,该帐户必须存在于设备上。

如果用户需要使用Google帐户才能使用您的应用,您可以通过使用newChooseAccountIntent()方法触发用户,将用户引导至帐户选择屏幕,强制用户创建Google帐户。