一旦用户验证我的应用以查看和管理邮件,我的代码就可以运行。
或者看起来像这样:
但是,第一次(第一次请求),Google的对话框显示(上图)并要求用户进行身份验证,即使用户选择“确定”,也永远不会调用AccountManagerCallback(甚至“取消”应返回一些价值)
这是我的代码:
AccountManagerFuture<Bundle> future = mAccountManager.getAuthToken(mAccount, "oauth2:https://mail.google.com/", null, mActivity, new OnTokenAcquired(), null);
和AccountManagerCallback代码:
private class OnTokenAcquired implements AccountManagerCallback<Bundle> {
@Override
public void run(AccountManagerFuture<Bundle> result) {
// Do something useful
}
}
}
再次,一旦用户在上面的对话框中选择“确定”,我的代码就可以运行(AccountManagerCallback会被调用)。然后再次调用'getAuthToken()'方法。
上述问题可在Kitkat(Samsung Tab Pro 8.4)上找到,但不能在Jelly Bean(Galaxy Nexus)上找到。不确定它是Kitkat vs. Jelly Bean问题还是Samsung vs. Nexus问题。
如果是错误,是否有解决方法?
答案 0 :(得分:0)
KitKat有所不同。 Google对话框显示为单独的活动。 尝试使用类似的东西:
AccountManagerFuture<Bundle> future = mAccountManager.getAuthToken(mAccount, "oauth2:https://mail.google.com/", null, false, new OnTokenAcquired(), null);
然后
private class OnTokenAcquired implements AccountManagerCallback<Bundle> {
@Override
public void run(AccountManagerFuture<Bundle> result) {
// Do something useful
Bundle bundle;
bundle = result.getResult();
Intent launch = (Intent)bundle.get(AccountManager.KEY_INTENT);
if (launch != null) {
launch.setFlags(0);
mainActivity.startActivityForResult(launch, AUTHORIZATION_CODE);
}
}
}
然后
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode == RESULT_OK) {
if (requestCode == AUTHORIZATION_CODE) {
// request token here again
}
}