我正在使用AccountManager获取OAuth 2.0令牌.
mAccountManager.getAuthToken(mAccount, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
Bundle bundle = future.getResult();
if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
String authToken = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
... continue
}
}
}
}, null);
如果令牌第一次到达,AccountManager会在状态栏中显示通知,该通知会启动请求访问帐户权限的活动.
问题是,如何在不点击通知的情况下直接显示此活动?
如果有人没有关于此的具体信息,但有用的链接,请发布.
解决方法:
在这里找到解决方案:
http://www.finalconcept.com.au/article/view/android-account-manager-using-other-accounts
这是代码的副本,以防页面消失:
private final Handler handler = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
final AccountManager accMgr;
final Account[] accounts;
final Account account;
final AccountManagerFuture<Bundle> amf;
final MainActivity cbt = this;
String authTokenType;
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
accMgr = AccountManager.get(this);
authTokenType = "com.google";
accounts = accMgr.getAccountsByType(authTokenType);
account = accounts[2];
amf = accMgr.getAuthToken(account, authTokenType, true,
new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> arg0) {
try {
Bundle result;
Intent i;
String token;
result = arg0.getResult();
if (result.containsKey(AccountManager.KEY_INTENT)) {
i = (Intent)result.get(AccountManager.KEY_INTENT);
if (i.toString().contains("GrantCredentialsPermissionActivity")) {
// Will have to wait for the user to accept
// the request therefore this will have to
// run in a foreground application
cbt.startActivity(i);
} else {
cbt.startActivity(i);
}
} else {
token = (String)result.get(AccountManager.KEY_AUTHTOKEN);
/*
* work with token
*/
// Remember to invalidate the token if the web service rejects it
// if(response.isTokenInvalid()){
// accMgr.invalidateAuthToken(authTokenType, token);
// }
}
} catch (OperationCanceledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AuthenticatorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, handler);
}
这个页面也很有用:
Google Account Authenticator asks for permission at run-time
标签:android,accountmanager 来源: https://codeday.me/bug/20190621/1252855.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。