Android 如何使用AddAccount显式添加帐户?

Android 如何使用AddAccount显式添加帐户?,android,account,accountmanager,securityexception,Android,Account,Accountmanager,Securityexception,我发现很多关于这个话题的问题,没有答案,或者外部链接中断。我想以一种简单的方式添加一个帐户。错误总是一样的:java.lang.SecurityException:调用方uid xxxxx与身份验证程序的uid不同(我在其中显式调用AddAccount)。但是帐户类型在代码和xml中是相同的,所以。。。我哪里做错了 public class AuthActivity extends Activity { @Override protected void onCreate(Bund

我发现很多关于这个话题的问题,没有答案,或者外部链接中断。我想以一种简单的方式添加一个帐户。错误总是一样的:java.lang.SecurityException:调用方uid xxxxx与身份验证程序的uid不同(我在其中显式调用AddAccount)。但是帐户类型在代码和xml中是相同的,所以。。。我哪里做错了

public class AuthActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auth);

        AccountManager accountManager = AccountManager.get(this);
        final Account account = new Account("username", getString(R.string.account_type));
        accountManager.addAccountExplicitly(account, "password", null);
    }
}

<?xml version="1.0" encoding="utf-8"?>
<account-authenticator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="@string/account_type"
    android:icon="@drawable/ic_launcher"
    android:smallIcon="@drawable/ic_launcher"
    android:label="@string/name_app" />
公共类AuthActivity扩展活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u auth);
AccountManager=AccountManager.get(此);
最终账户=新账户(“用户名”,getString(R.string.Account_type));
accountManager.addAccountExplicit(帐户,“密码”,null);
}
}

作为例外,您的应用程序和验证器必须共享相同的UID。通常,所有不同的应用程序都有不同的UID,因此如果您没有专门设置它们以共享UID,它们将有不同的UID

您可以查看应用程序分配的UID。您可以通过在中使用获取ApplicationInfo


您可以使用清单文件中的属性为验证器和应用程序设置共享UID。

我遇到了与您相同的问题。事实证明,我没有在我的应用程序清单文件中正确注册身份验证服务:

<service
        android:name="com.example.android.syncadapter.AuthenticatorService">
    <intent-filter>
        <action android:name="android.accounts.AccountAuthenticator"/>
    </intent-filter>
    <meta-data
        android:name="android.accounts.AccountAuthenticator"
        android:resource="@xml/authenticator" />
</service>


您的意图过滤器名称由android框架定义。所以它必须是“android.accounts.AccountAuthenticator”

以确保您正在尝试添加自己类型的帐户,而不是Google、Facebook或类似的帐户?是的,当然我正在尝试添加自定义类型的帐户。