首先,動機之內:等待getAuthToken意圖結果的服務
我建立,可以從中受益的應用程序,但並不絕對要求,通過AccountManager
獲得Android服務。既然如此,我已經構建了我的應用程序,但沒有使用GET_ACCOUNTS
和USE_CREDENTIALS
權限,而是選擇構建Service
授權插件,用戶可以選擇安裝該插件。現在,這個插件完全按照預期工作,除了一個明顯的問題:我可以開始從getAuthToken(...)
返回的Intent
要求初始授權,但我不能等待它完成。
所以,現在它被稱爲我爲什麼要叫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
?不過,我必須相信還有比這更好的解決方案。