我的Android应用使用AccountManager API访问Google财经。 AndroidManifest.xml中是否有任何功能/属性或我可用于确保该应用仅适用于安装了Google身份验证器(附加组件)的设备的任何其他技术?
答案 0 :(得分:3)
自API级别5以来,AccountManager可用,这意味着所有具有Android 2.0或更高版本的设备都可以使用它。
您可以使用getAccountsByType
作为帐户类型检查带有com.google
的Google帐户。
即使设备具有Android 2.0或更高版本,也无法保证用户会设置Google帐户。他们无法访问市场或其他谷歌应用程序(Gmail,地图等),但其他任何东西都可以使用。
就像谷歌一样:当用户启动应用时,检查是否有正确的帐户,如果没有通知用户并停止应用。
答案 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开发人员),但这应该让您了解如何检查系统上是否存在验证器,而不会触发添加帐户活动,以防它存在。