SecurityException при попытке добавить учетную запись

Я экспериментирую с Android AccountManager,

У меня есть служба аутентификации учетной записи, которая показывает пользовательский интерфейс для ввода имени пользователя / пароля.

Я захожу в "Настройки" / "Учетные записи" / "Добавить учетную запись", выбираю новый тип учетной записи и мне предоставляется пользовательский интерфейс.

Когда я нажимаю ОК, я получаю следующую ошибку

04-24 14:48:29.334: E/AndroidRuntime(386): java.lang.SecurityException: 
    caller uid 10035 is different than the authenticator's uid

Единственный метод MyAccountAuthenticationService:

@Override
public IBinder onBind(Intent intent) {
    return new MyAccountAuthenticator(this).getIBinder();
}

MyAccountAuthenticator:

@Override
public Bundle addAccount(AccountAuthenticatorResponse response, 
    String accountType, String authTokenType, String[] requiredFeatures, 
    Bundle options) throws NetworkErrorException {

    final Intent intent = new Intent(context, MyAccountCreatorActivity.class);
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
    final Bundle bundle = new Bundle();
    bundle.putParcelable(AccountManager.KEY_INTENT, intent);
    return bundle;
}

Фрагмент MyAccountCreatorActivity"s onClick

AccountManager accManager = AccountManager.get(this);
Account newAccount = new Account(email, MyAccountAuthenticator.ACCOUNT_TYPE);
accManager.setPassword(newAccount, password);

Исключение брошено на setPassword, Я уже потребовал все бухгалтерские разрешения. Я не уверен, что может быть причиной этого. Если вам нужно больше кода / информации, пожалуйста, спросите.

Спасибо.

4 ответа

Решение

Благодаря @imran khan я обнаружил, что мое постоянное значение не соответствует "точно" тому, что было в определении XML аутентификатора

Кажется очевидным, но вы также увидите эту ошибку, если ваша служба аутентификации не была определена в AndroidManifest.xml. Например:

<service android:name="your.AuthService">
    <intent-filter>
        <action android:name="android.accounts.AccountAuthenticator" />
    </intent-filter>
    <meta-data android:name="android.accounts.AccountAuthenticator"
         android:resource="@xml/authenticator" />
</service>

В моем случае я получил эту ошибку, когда запускал два разных варианта на одном устройстве. Второй пытался получить доступ к той же учетной записи, что и первый, что вызвало ошибку.

В моем случае я случайно определил AuthenticatorService в Манифесте вне <application> теги. Перемещение декларации внутри <application> исправил проблему. Надеюсь, кто-то поможет.

Другие вопросы по тегам