如何使用AddAccountExplicitly添加帐户?
问题描述:
我发现很多关于这个主题的问题,没有一个答案或外部链接断开。我想以简单的方式添加一个帐户。错误总是相同的:java.lang.SecurityException:调用者uid xxxxx与认证者的uid不同(我调用addAccountExplicitly)。但是,账号类型在代码和xml中是相同的,所以......我在哪里做错了?如何使用AddAccountExplicitly添加帐户?
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" />
答
作为例外说你的应用程序和你的验证器必须共享相同的UID。通常,所有不同的应用程序都会得到不同的UID,因此如果您没有专门设置它们以共享UID,它们将具有不同的UID。
您可以通过查看ApplicationInfo.uid来查看您的应用已分配了哪些UID。您可以通过PackageManager中的getApplicationInfo()获取ApplicationInfo。
您可以使用清单文件中的android:sharedUserId属性为您的身份验证器和您的应用程序设置共享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或类似帐户? – nibarius 2014-11-21 07:58:36
是的,自然我试图添加我的自定义类型的帐户。 – 2014-11-21 11:09:51