首先,动机之内:等待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
?不过,我必须相信还有比这更好的解决方案。