2013-07-25 10 views
5

Ho implementato l'accesso con google senza problemi. Sto usando un frammento al posto di un'attività. Test del codice su samsung galaxie accade che il sistema di accesso vada in pausa e non chiami il metodo collegato. Questo accade solo la prima volta, quando i termini e le condizioni mostrano. Qualche consiglio? Ecco il mio codice:Accesso Android con Google più il problema al primo accesso

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    initGoogle() 
} 


private void initGoogle() { 
    mPlusClient = new PlusClient.Builder(getActivity() , this , this).setVisibleActivities("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity").build(); 

} 

public void connectWithPlus() { 
    launchProgressScreen(); 
    if(mPlusClient != null && !mPlusClient.isConnected()){ 
     mPlusClient.connect(); 
    }else{ 
     mPlusClient.clearDefaultAccount(); 
     mPlusClient.disconnect(); 
     mPlusClient.connect(); 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_CODE_RESOLVE_ERR) { 
    mConnectionResult = null; 
    connectWithPlus(); 
} 
} 
@Override 
public void onConnectionFailed(ConnectionResult result) { 
    if (result!= null && result.hasResolution()) { 
     try { 
      result.startResolutionForResult(getActivity(), REQUEST_CODE_RESOLVE_ERR); 
     } catch (SendIntentException e) { 
      connectWithPlus(); 
     } 
     mConnectionResult = result; 
    }else{ 
     onTaskResult(ProgressAlert.TASK_CANCEL_GOOGLE_LOGIN, null); 
    } 
} 
@Override 
public void onConnected(Bundle connectionHint) { 
    AsyncTask<Object, Void, String> task = new AsyncTask<Object, Void, String>() { 
     @Override 
     protected String doInBackground(Object... params) { 
      String token = null; 
      try { 
       token = GoogleAuthUtil.getToken(getActivity(), mPlusClient.getAccountName(),  
         "oauth2:" + Scopes.PLUS_LOGIN); 
      } catch (UserRecoverableAuthException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (GoogleAuthException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return token; 
     } 

     @Override 
     protected void onPostExecute(String token){ 
      getAuthDelegate().setToken(token, SocialAccount.google); 
      getAuthDelegate().loginUsingGoogle(token, new HashMap<String, String>()); 
     } 
    }; 
    task.execute(); 
} 

@Override 
public void onDisconnected() { 
    Log.w("Google Login", "called disconnected"); 
} 

@Override 
public void onClick(View v) { 
    connectWithPlus(); 
} 
+0

State ottenendo onConnectionFailed indietro invece? – Lee

+0

No, non sto ricevendo nulla. Ma stranamente se si tenta di connettersi di nuovo chiama onConnected senza fallire. –

+0

Potresti postare i bit rilevanti del corrispondente codice attività? Mi piacerebbe vedere come stai legando nel ciclo di vita dell'Attività. – Lee

risposta

0

Si dovrebbe elaborare questo blocco catch:

catch (UserRecoverableAuthException userRecoverableException) { 
    startActivity(userRecoverableException.getIntent()); 
} 
1

Ho affrontato lo stesso problema e ho riparato ridefinendo onResume metodo frammento.

Non sono ancora sicuro se la sua soluzione valida o meno.

Grazie, Rahul