まず、動機:
から恩恵を受ける可能性のあるアプリを構築していますが、絶対に必要というわけではありませんAccountManager
. GET_ACCOUNTS
そのため、権限なしでアプリUSE_CREDENTIALS
をビルドし、代わりにService
、ユーザーがオプションでインストールできる承認用のプラグインをビルドすることを選択しました。現在、このプラグインは、1 つの明白な問題を除いて、完全に意図したとおりに機能します。最初の承認を要求するIntent
から返されたものを開始できますが、完了するのを待ちきれません。getAuthToken(...)
ではなくgetAuthToken(...)
から呼び出したい理由がわかったので、トークンを返す前に承認が完了するのを待つ方法を知っている人はいますか? 基本的に、以下のコードでは、完了するまで戻るのを延期する方法を知っている人はいますか?Service
Activity
Intent
token
authIntent
...
AccountManagerFuture<Bundle> accountManagerFuture;
accountManagerFuture = accountManager.getAuthToken(accounts[0], "android", true, null, null);
Bundle authTokenBundle = accountManagerFuture.getResult();
if (authTokenBundle.containsKey(AccountManager.KEY_AUTHTOKEN))
token = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString();
else if (authTokenBundle.containsKey(AccountManager.KEY_INTENT)) {
Intent authIntent = (Intent) authTokenBundle.getParcelable(AccountManager.KEY_INTENT);
authIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(authIntent);
...
// I know that I wouldn't set token here; this is just to emphasize
// that I want to set it after authIntent completes
token = ???
}
また、知っておくと便利な場合は、上記のコードはAsyncTask
. 醜いかもしれませんが、 ?getAuthToken(...)
が返されなくなるまでポーリングできるかもしれません。Intent
しかし、それよりも良い解決策があると信じなければなりません。