Запретить несколько учетных записей в AccountManager - PullRequest
11 голосов
/ 12 января 2012

Я реализовал свой аутентификатор AccountManager, а также сервис и всю сделку, и, похоже, все работает нормально.

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

Является ли мое единственное решение для поиска и удаления текущих учетных записей (по типу) перед добавлением новой учетной записи?

Мой текущий код:

private void removeAccounts()
{
    Account [] accounts = mAcctMgr.getAccountsByType (mAccountType);

    if (accounts.length == 0) return;

    final Handler handler = new Handler (); 

    AccountManagerCallback<Boolean> callback = new AccountManagerCallback<Boolean>()
    {
        @Override
        public void run(AccountManagerFuture<Boolean> arg0)
        {
           // nada
        }
    };

    for (Account a : accounts) {
        mAcctMgr.removeAccount (a, callback, handler);
    }
}

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

Ответы [ 3 ]

13 голосов
/ 12 декабря 2012

Согласно javadocs для addAccount(), если при создании учетной записи возникает ошибка, вы должны вернуть пакет, содержащий параметры KEY_ERROR_CODE и KEY_ERROR_MESSAGE,

    if (accountExists) {
        final Bundle result = new Bundle();
        result.putInt(AccountManager.KEY_ERROR_CODE, ERROR_CODE_ONE_ACCOUNT_ALLOWED);
        result.putString(AccountManager.KEY_ERROR_MESSAGE, context.getString(R.string.one_account_allowed));

        handler.post(new Runnable() {

            @Override
            public void run() {
                RepeatSafeToast.show(context, R.string.one_account_allowed);
            }
        });
        return result;
    }

Возвращение null не означает , что означает сбой, это означает, что результат будет передан через параметр ответа методу addAccount().

5 голосов
/ 08 марта 2012

В функции addAccount вашего класса Authenticator (который расширяет AbstractAccountAuthenticator) сначала проверьте, существует ли учетная запись.Если учетная запись уже существует, просто верните null (и, возможно, покажите всплывающее сообщение).Если учетных записей нет, просто верните пакет, как вы делали раньше.

        if(AccountHelper.accountExists(mContext)) {
        mHandler.post(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(mContext, "Only one account allowed", Toast.LENGTH_SHORT).show();
            }
        });
        return null;
    }
0 голосов
/ 10 января 2015

По этой ссылке указано, как переименовать учетную запись, что может быть эквивалентно вашему запросу переименовать учетную запись на developer.Android .Однако он доступен только с уровня API 21. Если у кого-то есть способ сделать это для более ранних устройств, пожалуйста, поделитесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...