Che*_*eng 10 android google-play-services google-drive-android-api
每当我在第一个应用程序启动周期中第一次运行代码时
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(context)
.addApi(Drive.API)
.addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
Run Code Online (Sandbox Code Playgroud)
我可以看到以下帐户选择器.
但是,如果之前的连接成功,并且我在第二个应用程序启动周期中第一次再次运行相同的代码.
帐户选择器不会再次弹出.GoogleApiClient将使用帐户名称,我在之前的应用程序启动周期中选择.
我希望每次都能弹出我的帐号选择器.
我遇到了如何清除GoogleApiClient默认帐户和凭据
建议的解决方案不适合我的情况.
mGoogleApiClient.clearDefaultAccountAndReconnect()
Run Code Online (Sandbox Code Playgroud)
如果我已连接上一个应用程序周期,并且我在当前应用程序周期中第一次调用上面的代码,我将得到以下异常.
java.lang.IllegalStateException: GoogleApiClient is not connected yet.
at com.google.android.gms.common.internal.zzx.zza(Unknown Source)
at com.google.android.gms.common.api.internal.zzj.clearDefaultAccountAndReconnect(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
以下代码也不起作用.
if (mGoogleApiClient.isConnected()) {
// No chance to execute this code, if you run this code during app launch.
mGoogleApiClient.clearDefaultAccountAndReconnect();
} else {
// No account chooser will pop up if you had been connected in previous app life cycle
mGoogleApiClient.connect();
}
Run Code Online (Sandbox Code Playgroud)
我可以知道,每次调用connect时,如何强制GoogleApiClient提示帐户选择器UI?
sea*_*npj 12
在GDAA和REST Api中,您有两种选择:
1 /您没有指定帐户,底层系统将管理它.
2 /您自己管理帐户.
如果您使用第一种方法,则永远不会知道您的应用用户是谁.您只能通过以下方式"清理"帐户clearDefaultAccountAndReconnect.选择对话框再次弹出,用户可以选择(添加)另一个帐户.
如果您需要知道当前选定的用户帐户(即缓存/持久性),您必须自己管理帐户选择,如此处(对于REST)或此处(对于GDAA) - 只需按照 REQ_ACCPICK跟踪和UT.AM类.这样你就可以完全掌控了.
所以,你的问题的简短回答是你弹出
startActivityForResult(AccountPicker.newChooseAccountIntent(null,
null, new String[]{GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE}, true, null, null, null, null),
REQ_ACCPICK);
Run Code Online (Sandbox Code Playgroud)
自己活动并交付结果
email = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME)
Run Code Online (Sandbox Code Playgroud)
你setAccountName(email)的:
GAC = new GoogleApiClient.Builder(act)
.addApi(Drive.API)
.addScope(Drive.SCOPE_FILE)
.addScope(Drive.SCOPE_APPFOLDER)
.addConnectionCallbacks(...)
.addOnConnectionFailedListener(...)
....
.setAccountName(email)
....
.build();
Run Code Online (Sandbox Code Playgroud)
祝好运
我想我迟到了,但这就是我解决它的方式。
在我开始 Google SignIn Intent 之前,它将显示构建器。
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
做这个:
if (mGoogleApiClient.hasConnectedApi(Auth.GOOGLE_SIGN_IN_API)) {
mGoogleApiClient.clearDefaultAccountAndReconnect();
}
由于mGoogleApiClient出于某种原因存储了登录的用户。因此,如果您这样做mGoogleApiClient.isConnected(),即使您正在重新创建mGoogleApiClient. 但是,这将强制它清除已选择的用户。
经测试,它有效。
| 归档时间: |
|
| 查看次数: |
6324 次 |
| 最近记录: |