当前位置:  开发笔记 > 编程语言 > 正文

每次调用connect时,如何强制GoogleApiClient提示帐户选择器UI?

如何解决《每次调用connect时,如何强制GoogleApiClient提示帐户选择器UI?》经验,为你挑选了1个好方法。

每当我在第一个应用程序启动周期中第一次运行代码

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?



1> seanpj..:

在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();

祝好运


另一点:AccountPicker.newChooseAccountIntent()创建的选择器对话框与GooglePlayServices中内置的完全不同.它变得更糟:它没有正确的主题,浅色主题的黑暗背景,黑色背景上的小部件是黑色的.看起来像谷歌那些家伙甚至不打扰最琐碎的测试.
我没有意识到我们可以直接setAccountName.谢谢.
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有