每当我在第一个应用程序启动周期中第一次运行代码时
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();
我可以看到以下帐户选择器.
但是,如果之前的连接成功,并且我在第二个应用程序启动周期中第一次再次运行相同的代码.
帐户选择器不会再次弹出.GoogleApiClient
将使用帐户名称,我在之前的应用程序启动周期中选择.
我希望每次都能弹出我的帐号选择器.
我遇到了如何清除GoogleApiClient默认帐户和凭据
建议的解决方案不适合我的情况.
mGoogleApiClient.clearDefaultAccountAndReconnect()
如果我已连接上一个应用程序周期,并且我在当前应用程序周期中第一次调用上面的代码,我将得到以下异常.
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)
以下代码也不起作用.
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(); }
我可以知道,每次调用connect时,如何强制GoogleApiClient提示帐户选择器UI?
在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);
自己活动并交付结果
email = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME)
你setAccountName(email)
的:
GAC = new GoogleApiClient.Builder(act) .addApi(Drive.API) .addScope(Drive.SCOPE_FILE) .addScope(Drive.SCOPE_APPFOLDER) .addConnectionCallbacks(...) .addOnConnectionFailedListener(...) .... .setAccountName(email) .... .build();
祝好运