GoogleAccountCredential setSelectedAccountName 但仍然为空
GoogleAccountCredential setSelectedAccountName but still null
账户名设置后还是空
我已经看到 ,但我确实在清单中拥有 GET_ACCOUNTS
权限,并且在 运行 时得到了保护。
以下设置正在 运行 Pixel XL 模拟器 API 25 (Android 7.1.1)。
清单
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Activity
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;
}
}
Logcat
04-18 21:26:47.590 2700-2700/com.package D/MainActivity: queryAPI: account name null
这个 google 帐户 "test@gmail.com" 是在设备帐户中设置的吗?
首先,您需要设置要在您的应用中使用的 google 帐户,方法是在您正在测试它的设备上转到设置/帐户/添加帐户。仅传递帐户名是不够的,该帐户必须存在于设备上。
如果用户需要 google 帐户才能使用您的应用,您可以通过使用 newChooseAccountIntent( ) 方法。
使用 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 帐户作为第一个参数,将您的包名称作为第二个参数。
账户名设置后还是空
我已经看到 GET_ACCOUNTS
权限,并且在 运行 时得到了保护。
以下设置正在 运行 Pixel XL 模拟器 API 25 (Android 7.1.1)。
清单
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Activity
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;
}
}
Logcat
04-18 21:26:47.590 2700-2700/com.package D/MainActivity: queryAPI: account name null
这个 google 帐户 "test@gmail.com" 是在设备帐户中设置的吗?
首先,您需要设置要在您的应用中使用的 google 帐户,方法是在您正在测试它的设备上转到设置/帐户/添加帐户。仅传递帐户名是不够的,该帐户必须存在于设备上。
如果用户需要 google 帐户才能使用您的应用,您可以通过使用 newChooseAccountIntent( ) 方法。
使用 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 帐户作为第一个参数,将您的包名称作为第二个参数。