getAuthToken没有调用AccountManagerCallback

时间:2014-09-23 13:52:33

标签: android gmail

一旦用户验证我的应用以查看和管理邮件,我的代码就可以运行。

enter image description here

或者看起来像这样:

enter image description here

但是,第一次(第一次请求),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问题。

如果是错误,是否有解决方法?

1 个答案:

答案 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 
    }
}