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

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

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

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

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

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 onClick

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

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

Спасибо.


person usr-local-ΕΨΗΕΛΩΝ    schedule 24.04.2012    source источник
comment
см. этот loganandandy.tumblr.com/post/613041897/caller-uid- is-other может быть полезно   -  person ρяσѕρєя K    schedule 24.04.2012
comment
comment
@rds извините, это не обман. В исходном XML была опечатка, однако Android не объяснит вам истинную природу проблемы.   -  person usr-local-ΕΨΗΕΛΩΝ    schedule 28.10.2015


Ответы (4)


Кажется очевидным, но вы также увидите эту ошибку, если ваша служба проверки подлинности не была определена в 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>
person droideckar    schedule 06.06.2013
comment
Спасибо за ответ. В вопросе не говорилось, что я уже написал XML, в этом случае с ошибкой синтаксиса. - person usr-local-ΕΨΗΕΛΩΝ; 07.06.2013

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

person usr-local-ΕΨΗΕΛΩΝ    schedule 24.04.2012
comment
Я не понимаю, чем ваше XML-определение аутентификатора отличается от ответа об AndroidManifest. Вам нужно было сопоставить свой AndroidManifest или ответ был где-то еще? - person Danny; 15.08.2013
comment
если я неправильно наберу org.zighinetto.myapp.account как org.zighinetto.myap.account, это не сработает. Это было просто определено одним способом в XML и другим способом в коде (общедоступная статическая конечная строка... вы знаете...) - person usr-local-ΕΨΗΕΛΩΝ; 20.08.2013

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

person Steve Strates    schedule 05.08.2016
comment
У меня была такая же проблема на телефоне Android 5, которую я исправил, изменив имя измерения вкуса, благодаря вашему ответу :) - person matdev; 14.12.2017

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

person Mateusz Wlodarczyk    schedule 08.05.2016