我正在努力了解Android AccountManager API.据我所知,我可以使用blockingGetAuthToken方法并指定Android是否应为用户提供通知以允许或拒绝该请求.另一种可能性是使用getAuthToken并检查是否返回了KEY_INTENT.如果是这种情况,我可以启动一个新的活动,用户可以在其中确认我的请求.
我的问题是我想从Service内调用这两种方法之一.用户做出决定后,是否有机会获得回调?
谢谢你的帮助
最佳答案
如果您在用户做出决定后想要回调,则最好使用异步版本:
原文链接:/android/531499.htmlAccountManager mgr = AccountManager.get(getApplicationContext());
Account[] accounts = mgr.getAccountsByType("com.mydomain");
// assert that accounts is not empty
您将要使用AccountManagerFuture< Bundle>保存认证令牌的结果.这必须是异步的,因为Android设备可能会同时要求用户登录:
private AccountManagerFuture<Bundle> myFuture = null;
private AccountManagerCallback<Bundle> myCallback = new AccountManagerCallback<Bundle>() {
@Override public void run(final AccountManagerFuture<Bundle> arg0) {
try {
myFuture.getResult().get(AccountManager.KEY_AUTHTOKEN); // this is your auth token
} catch (Exception e) {
// handle error
}
}
}
现在,您可以异步请求auth令牌:
myFuture = mgr.getAuthToken(accounts[0],AUTH_TOKEN_TYPE,true,myCallback,null);