3

サービスから AccountManager.getAuthToken を使用して、Googledocs と Spreadsheet API にアクセスします。

私はバックグラウンドでそれを行っており、 user を中断したくないので、ユーザーの操作が必要なときに accountManager が通知を発生できるようにします (パラメーター boolean notifyAuthFailure を使用)。

予想通り、CallBack は AccounManagerFuture で呼び出され、そのような場合は KEY_INTENT フィールドで Bundle に解決されます。

「その場合、ユーザーが応答するまで待つ必要があり、これには数時間、数日、または永遠にかかる可能性があります。ユーザーが応答して新しいパスワードを入力すると、アカウントマネージャーは LOGIN_ACCOUNTS_CHANGED_ACTION インテントをブロードキャストし、アプリケーションはこれを使用して試行できます。また"

問題が間違ったパスワードだけである場合は、うまく機能します。しかし、AccountAuthenticator が実行時に許可を要求し、インテント (通知バーから) が GrantCredentialsPermissionActivity を開始するという問題が発生しました。これにより、ユーザーがボタン (許可または拒否) を押した後、ユーザーが既に応答したことを知ることができません。

問題は、ユーザーとの対話が終了したことを知る方法と、AuthToken の取得を再試行する方法です。

NotificationBar から開始するため、GrantCredentialsPermissionActivity から onActivityResult を取得できません (トークンを取得しようとしているときにサービスを使用するため、他のアクティビティからではありません)。

マニフェストの前にアクセス許可を指定することはできません。これは、Google認証システムによって定義されたカスタムのアクセス許可であることを理解しているためです。

GrantCredentialsPermissionActivity を閉じた後、ユーザーが実行時にアプリケーションの要求されたアクセス許可を承認/拒否したときに、インテントをブロードキャストしていないようです。ありがとうございました。

4

2 に答える 2

0

Just check again in onResume that will get called even if the permission activity is a dialog. You will be asking more than needed but not excessively.

于 2013-01-16T19:11:01.040 に答える
-1

ユーザー インタラクションがいつ終了したかを知る最善の方法は、イベントをブロードキャストして受信することです。

于 2011-07-14T13:07:03.587 に答える