2014-09-23 2 views
4

사용자가 메일을보고 관리하기 위해 내 앱을 인증하면 내 코드가 작동합니다. 구글의 대화 (위)를 표시하고 인증하는 사용자에게getAuthToken이 AccountManagerCallback을 호출하지 않습니다.

enter image description here

그러나, 처음 (첫 번째 요청에 대한) :

enter image description here

또는이 같이 보입니다 , 사용자가 '확인'을 선택해도 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으로 (삼성 탭 프로 8.4)하지만 (갤럭시 넥서스)에 있습니다. Kitkat 대 Jelly Bean 문제인지 Samsung 대 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 
    } 
} 
관련 문제