2013-07-25 113 views
5

我用google实施了登录,没有任何问题。我正在使用片段代替活动。 在三星星系上测试代码时,发生登录系统空闲并且不会调用onConnected方法。 这只是第一次,当条款和条件显示。 有什么建议吗? 这里是我的代码:首次登录时用Android登录Google plus问题

@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

你得到onConnectionFailed回来呢? – Lee

+0

不,我什么也没有。但奇怪的是,如果y尝试再次连接,它会调用onConnected而不会失败。 –

+0

你可以发布相应Activity代码的相关位吗?我想看看你如何搭配Activity生命周期。 – Lee

回答

0

您应该处理此catch块:

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

我面临同样的问题,我在片段覆盖的onResume方法固定它。

@Override 
    public void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     mGoogleApiClient.connect(); 
    } 

我还不确定它的有效解决方案与否。

感谢, 拉胡尔