5

認証を扱うときの Android アーキテクチャについて、いくつか疑問があります。

AccountManager.getAuthToken認証が必要な特定のアカウントを呼び出すとします。間違ったパスワードが原因で認証が失敗したとしましょう。コントラクトでは、オーセンティケーターが を介してユーザー名/パスワードの入力を処理するAbstractAccountAuthenticatorを返す必要があります。BundleActivityKEY_INTENT

私の質問は、UI を表示するのは誰ですか? AndroidKEY_INTENTは が存在することを自動的に検出して UI を実行しますか、それとも私のコードはの応答startActivityに具体化された意図を持っている必要がありますか? 同じことが、Future インターフェースを介して結果をバンドルする場合AccountManagerにも当てはまります。AccountManager.addAccount

これらのトピックに関するチュートリアルはどこにありますか?

ありがとうございました

4

1 に答える 1

0

が存在する場合、システムはアクティビティを自動的に表示しませんKEY_INTENT。その活動を始めるのはあなた次第です。

サンプルコードは次のとおりです。

private AccountManagerCallback<Bundle> mAccountManagerCallback = new AccountManagerCallback<Bundle>() {

    public void run(AccountManagerFuture<Bundle> future) {

        Bundle bundle;
        try {

            bundle = future.getResult();
            //if an intent was sent, start the required activity
            if (bundle.containsKey(AccountManager.KEY_INTENT)) {
                Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT);

                //clear the new task flag just in case, since a result is expected
                int flags = intent.getFlags();
                flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK;
                intent.setFlags(flags);

                startActivityForResult(intent, REQUEST_CODE_AUTH);

        } else {
            //otherwise, just get the credentials
            if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
                    String authToken    = bundle.getString(AccountManager.KEY_AUTHTOKEN);
                    String userMail     = bundle.getString(AccountManager.KEY_ACCOUNT_NAME);
                    //use the credentials
            }
        }
      }
      catch(...) {
        ...
        //handle errors, maybe retry your getAuthToken() call
      }
    }
}

これがあなたが探していたものであることを願っていますが、あなたの質問を正しく理解できなかった場合は、明確にしてください.

乾杯!

于 2012-06-05T15:41:49.463 に答える