2012-03-23 9 views
7

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

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

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

Благодаря

ответ

7

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

Предполагая, что ваше имя пакета 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 предупреждает, что эта экспортированная служба не требует разрешений).

А потом в Рез/XML добавить файл authenticator.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.

1

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

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