如何检查Android设备上是否有Google身份验证器?

时间:2011-05-07 18:17:11

标签: android

我的Android应用使用AccountManager API访问Google财经。 AndroidManifest.xml中是否有任何功能/属性或我可用于确保该应用仅适用于安装了Google身份验证器(附加组件)的设备的任何其他技术?

3 个答案:

答案 0 :(得分:3)

  1. 自API级别5以来,AccountManager可用,这意味着所有具有Android 2.0或更高版本的设备都可以使用它。

  2. 您可以使用getAccountsByType作为帐户类型检查带有com.google的Google帐户。

  3. 即使设备具有Android 2.0或更高版本,也无法保证用户会设置Google帐户。他们无法访问市场或其他谷歌应用程序(Gmail,地图等),但其他任何东西都可以使用。

  4. 就像谷歌一样:当用户启动应用时,检查是否有正确的帐户,如果没有通知用户并停止应用。

答案 1 :(得分:0)

它与谷歌帐户身份验证器无关,此行为是通用的:

AccountManager.get(context).addAccount(
                    <google account type>,
                    <needed token type>,
                    null,
                    <options or null if not needed>,
                    activityToStartAccountAddActivity,
                    new AccountManagerCallback<Bundle>() {
                        @Override
                        public void run(AccountManagerFuture<Bundle> future {
                            try {
                                future.getResult();
                            } catch (OperationCanceledException e) {
                                throw new RuntimeException(e);
                            } catch (IOException e) {
                                throw new RuntimeException(e);
                            } catch (AuthenticatorException e) {
                                throw new RuntimeException(e); // you'll go here with "bind failure" if google account authenticator is not installed
                            }
                        }
                    },
                    null);

如果您没有在设备上安装身份验证器(支持请求的帐户类型和令牌类型),那么您将获得AuthenticatorException。基本上,任何Android设备都有谷歌身份验证器。如果它没有root并删除相关包,当然:)

答案 2 :(得分:0)

使用getAccountsByType的解决方案的问题在于,您无法区分未安装身份验证器的情况或身份验证器的存在,但缺少通过身份验证的帐户。在第二种情况下,您可能希望提示用户添加新帐户。

当方法AccountManager.getAuthenticatorTypes()存在时,尝试添加帐户然后检查异常也不太理想。像这样使用它:

String type = "com.example"; // Account type of target authenticator
AccountManager am = AccountManager.get(this);
AuthenticatorDescription[] authenticators = am.getAuthenticatorTypes();
for (int i = 0; i < authenticators.length(); ++i) {
    if (authenticators[i].type.equals(type)) {
        return true; // Authenticator for accounts of type "com.example" exists.
    }
return false; // no authenticator was found.

我的Java有点生疏(我是Xamarin开发人员),但这应该让您了解如何检查系统上是否存在验证器,而不会触发添加帐户活动,以防它存在。

来源:
getAuthenticatorTypes
AuthenticatorDescription.type