Можно ли переопределить функцию «Учетные записи и синхронизация» «Удалить учетную запись»

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

1) Можно было переопределить функциональность кнопки «Добавить учетную запись» в «Учетные записи и синхронизация», но я не могу найти способ переопределить функциональность кнопки «Удалить учетную запись» — возможно ли это?

2) Я читал, что аутентификаторы могут предотвратить удаление своих учетных записей, но я не могу понять, как... кто-нибудь знает, как я могу добавить это в свой аутентификатор? Таким образом, я мог бы использовать AbstractAccoutnAuthenticator.getAccountRemovalAllowed для достижения желаемой функциональности.

Спасибо


person user1288511    schedule 23.03.2012    source источник


Ответы (2)


Чтобы ответить на ваш второй вопрос:

Предполагая, что имя вашего пакета com.companyname

Создайте класс Authenticator, который расширяет AbstractAccountAuthenticator в пакете com.companyname.auth, и реализуйте в нем этот метод:

@Override
public Bundle getAccountRemovalAllowed(AccountAuthenticatorResponse response, Account account) {
    Bundle result = new Bundle();
    boolean allowed = false; // or whatever logic you want here
    result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, allowed);
    return result;
}

Добавьте это в манифест:

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

(Обратите внимание, что lint выдает предупреждение о том, что эта экспортированная служба не требует разрешений).

А затем в res/xml добавьте файл authentication.xml:

<?xml version="1.0" encoding="utf-8"?>
<account-authenticator
xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.companyname"
android:icon="@drawable/app_icon"
android:smallIcon="@drawable/app_icon_small"
android:label="@string/app_name" />

Предположим, что тип вашей учетной записи — «com.companyname». Это то, что мы делаем, и, похоже, это работает с API 8 и выше.

person Zeoneous    schedule 22.05.2012

Предыдущий пользователь прав. Однако НЕТ способа настроить диалог (документация лжет и говорит, что вы можете вернуть намерение для пользовательского экрана, что явно не реализовано в коде).

Однако возвращать false НЕ рекомендуется. Поскольку он возвращает диалоговое окно, в котором пользователю сообщается что-то очень страшное (что-то вроде того, что вам нужно выполнить сброс до заводских настроек)

person Bishnu    schedule 28.07.2012