2014-11-20 201 views
1

我發現很多關於這個主題的問題,沒有一個答案或外部鏈接斷開。我想以簡單的方式添加一個帳戶。錯誤總是相同的: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" /> 
+0

只是爲了確保您試圖添加自己的帳戶類型,而不是Google,Facebook或類似帳戶? – nibarius 2014-11-21 07:58:36

+2

是的,自然我試圖添加我的自定義類型的帳戶。 – 2014-11-21 11:09:51

回答

0

作爲例外說你的應用程序和你的驗證器必須共享相同的UID。通常,所有不同的應用程序都會得到不同的UID,因此如果您沒有專門設置它們以共享UID,它們將具有不同的UID。

您可以通過查看ApplicationInfo.uid來查看您的應用已分配了哪些UID。您可以通過PackageManager中的getApplicationInfo()獲取ApplicationInfo。

您可以使用清單文件中的android:sharedUserId屬性爲您的身份驗證器和您的應用程序設置共享UID。

1

我和你有同樣的問題。原來,我沒有正確註冊我的身份驗證服務在我的應用程序清單文件:

<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」

相關問題