【发布时间】:2014-10-02 21:14:26
【问题描述】:
一、动机:
我正在构建一个可以从通过AccountManager 获得的 Android 服务中受益但并非绝对需要的应用程序。在这种情况下,我在没有GET_ACCOUNTS 和USE_CREDENTIALS 权限的情况下构建了我的应用程序,而是选择构建Service 插件以进行授权,用户可以选择安装该插件。现在,这个插件完全按照预期工作,除了一个明显的问题:我可以启动从getAuthToken(...) 返回的Intent,它要求初始授权,但我不能等待它完成。
所以,既然知道了为什么我想从Service 而不是Activity 调用getAuthToken(...),有谁知道我可以如何等待授权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?不过,我必须相信有比这更好的解决方案。
【问题讨论】:
标签: android android-intent android-service android-authenticator