Android AccountManager addAccount throwing OperationCanceledException при обратном вызове

Я разрабатываю приложение для Android, используя андроид-студию (0.8.2) и уровень API 19.

Я реализовал проверку подлинности с помощью AccountManager, но при попытке получить данные из AccountManagerFuture, возвращаемые обратным вызовом, указанным в AccountManager.addAccount, я столкнулся с этим исключением. Такое поведение возникает только при вызове addAccount из моего приложения, то есть onCreate of MainActivity. Ошибка не возникает, если учетная запись добавляется через экран настроек Android. Вот код, который вызывает addAccount:

mAccounts = mAccountManager.getAccountsByType(mAccountType); if (mAccounts.length == 0) { Log.d("MainActivity", "No accounts of type " + mAccountType); mAccountManager.addAccount( mAccountType, AUTHTOKEN_TYPE_FULL_ACCESS, null, new Bundle(), this, new OnAccountAddComplete(), null ); } 

И вот обратный вызов:

 private class OnAccountAddComplete implements AccountManagerCallback<Bundle> { @Override public void run(AccountManagerFuture<Bundle> result) { Bundle bundle; try { bundle = result.getResult(); } catch (OperationCanceledException e) { e.printStackTrace(); return; } catch (AuthenticatorException e) { e.printStackTrace(); return; } catch (IOException e) { e.printStackTrace(); return; } mAccount = new Account( bundle.getString(AccountManager.KEY_ACCOUNT_NAME), bundle.getString(AccountManager.KEY_ACCOUNT_TYPE) ); // do more stuff } } 

Они следуют примеру, показанному в этом примере . Система аутентификации и действия тесно следуют примеру, приведенному здесь , в частности, о входах и регистрации. Исключение регистрируется между концом SignUpActivity (строка 104) и обратным вызовом в AuthenticatorActivity (строка 81)

 W/System.err﹕ android.accounts.OperationCanceledException W/System.err﹕ at android.accounts.AccountManager$AmsTask.internalGetResult(AccountManager.java:1503) W/System.err﹕ at android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1531) W/System.err﹕ at android.accounts.AccountManager$AmsTask.getResult(AccountManager.java:1452) W/System.err﹕ at com.example.project.app.MainActivity$OnAccountAddComplete.run(MainActivity.java:256) W/System.err﹕ at android.accounts.AccountManager$11.run(AccountManager.java:1427) W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:733) W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:95) W/System.err﹕ at android.os.Looper.loop(Looper.java:136) W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5001) W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515) W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) W/System.err﹕ at dalvik.system.NativeStart.main(Native Method) 

Вызов result.getResult вызывает android.accounts.OperationCanceledException . В документации только указано, что вмешательство пользователя или другое событие отменило операцию. Несмотря на это, новая учетная запись создается и добавляется в AccountManager и может быть успешно использована приложением после его повторного открытия.

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