2014-09-23 16 views
4

我的代碼在用戶驗證我的應用程序以查看和管理郵件後有效。getAuthToken不會調用AccountManagerCallback

enter image description here

或者看起來是這樣的:

enter image description here

然而,在第一次(第一個請求),谷歌的對話顯示出來(上圖),並要求用戶進行身份驗證,那麼即使用戶選擇'OK'(即使'取消'應該返回一些值),也不會調用AccountManagerCallback

這是我的代碼:

​​

而且AccountManagerCallback代碼:

private class OnTokenAcquired implements AccountManagerCallback<Bundle> { 
     @Override 
     public void run(AccountManagerFuture<Bundle> result) { 
       // Do something useful 
      } 
     } 
    } 

同樣,我的代碼工作(AccountManagerCallback不會被調用),一旦用戶選擇了在上面的對話框 'OK'。然後再次調用'getAuthToken()'方法。


上面的問題可以在Kitkat(Samsung Tab Pro 8.4)上找到,但不能在Jelly Bean(Galaxy Nexus)上找到。不確定它是Kitkat vs. Jelly Bean問題還是Samsung vs. Nexus問題。

如果是錯誤,是否有解決方法?

回答

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