AccountManagerCallback

AccountManagerCallback

一旦用户验证我的应用程序以查看和管理邮件,我的代码就会工作。
或者看起来像这样:
但是,第一次(对于第一个请求),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(三星Tab Pro 8.4)上找到,但不能在果冻豆(Galaxy Nexus)上找到。不确定是Kitkat对Jelly Bean的问题还是三星对Nexus的问题。
如果是虫子,有办法解决吗?

最佳答案

风筝有区别。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
    }
}

08-18 19:03