Android应用程序在addAccountExplicitly(帐户,密码,null)崩溃;

成功进行基本身份validation后,我想添加一个帐户供以后使用。 当我尝试使用以下代码创建此帐户时:

AccountManager accountManager = AccountManager.get(getBaseContext()); final Account basicAccount = new Account(mEmail, "com.example"); accountManager.addAccountExplicitly(basicAccount, mPassword, null); 

当调用addAccountExplicitly(…)时,应用程序崩溃时出现以下错误:

 E/AndroidRuntime: FATAL EXCEPTION: main E/AndroidRuntime: Process: com.example, PID: 19094 E/AndroidRuntime: java.lang.SecurityException: uid 10107 cannot explicitly add accounts of type: com.example E/AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1599) E/AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1552) E/AndroidRuntime: at android.accounts.IAccountManager$Stub$Proxy.addAccountExplicitly(IAccountManager.java:890) E/AndroidRuntime: at android.accounts.AccountManager.addAccountExplicitly(AccountManager.java:712) E/AndroidRuntime: at com.example.LoginActivity$UserLoginTask.onPostExecute(LoginActivity.java:244) E/AndroidRuntime: at com.example.LoginActivity$UserLoginTask.onPostExecute(LoginActivity.java:209) E/AndroidRuntime: at android.os.AsyncTask.finish(AsyncTask.java:651) E/AndroidRuntime: at android.os.AsyncTask.-wrap1(AsyncTask.java) E/AndroidRuntime: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102) E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148) E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417) E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) W/ActivityManager: Force finishing activity com.example/.LoginActivity 

题:

  1. 我确定我的AccountType与authenticator.xml中指定的相同。 为什么我的代码会崩溃?
  2. 甚至可以使用AccountManager和Account进行基本身份validation吗? 我无法find一个很好的例子(他们都使用令牌……)
  3. 我的想法是将此帐户用于多个应用程序。 使用服务进行身份validation(使用意图)是最佳做法吗? 这方面有什么好的教程吗?

谢谢,Ove

Solutions Collecting From Web of "Android应用程序在addAccountExplicitly(帐户,密码,null)崩溃;"

在我的情况下,我发现我在设备上安装了另一个具有相同帐户名称和types的应用程序,但使用的是我尝试安装的签名证书。

所以它崩溃了应用程序。

检查android doc的方法addAccountExplicity,它说:

此方法要求调用者与拥有指定帐户的身份validation器具有签名匹配。

那是我的问题

1)崩溃的原因是因为AndroidManifest.xml中缺少以下代码段。

       

2)绝对可能,即使最佳实践示例仍然缺失。

3)不知道。 然而…

您使用"com.example"作为应用的唯一标识符,请检查"authenticator.xml"是否相同

你的第三个问题没有一个黄金回应。

如果所有应用都使用相同的名称,您可以考虑使用某项服务,只需记住将其限制为您自己的应用。

但是,用户可能会对安装应用程序后立即登录感到困惑,因此我建议允许用户在每个单独的应用程序中登录。 您可以在Google Developer Console中为同一个应用生成多个单独的私钥,从而在每个应用中获得相同的用户LOCAL_ID。

它可能由ACCOUNT_TYPE不匹配引起。 检查Class中的ACCOUNT_TYPE,authenticator.xml中的ACCOUNT_TYPE必须匹配

 private static final String ACCOUNT_TYPE = "com.someonew.syncaccount"; `< ?xml version="1.0" encoding="utf-8"?> `