Android google + логин во фрагменте
В настоящее время я пытаюсь внедрить google + login, используя фрагмент, чтобы я мог использовать его для различных действий. Я создал такой фрагмент
public class GoogleSignUpFragment extends Fragment implements
ConnectionCallbacks, OnConnectionFailedListener, OnClickListener {
// PlusClient Variables
private static final int REQUEST_CODE_RESOLVE_ERR = 9000;
private ProgressDialog mConnectionProgressDialog;
private PlusClient mPlusClient;
private ConnectionResult mConnectionResult;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mPlusClient = new PlusClient.Builder(getActivity()
.getApplicationContext(), this, this)
.setActions("http://schemas.google.com/AddActivity",
"http://schemas.google.com/BuyActivity")
.setScopes(Scopes.PLUS_LOGIN, Scopes.PLUS_PROFILE).build();
getActivity().findViewById(R.id.sign_in_button)
.setOnClickListener(this);
// Progress bar to be displayed if the connection failure is not
// resolved.
mConnectionProgressDialog = new ProgressDialog(getActivity());
mConnectionProgressDialog.setMessage("Signing in...");
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
mPlusClient.connect();
}
@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
mPlusClient.disconnect();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CODE_RESOLVE_ERR
&& resultCode == Activity.RESULT_OK) {
mConnectionResult = null;
mPlusClient.connect();
}
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.sign_in_button && !mPlusClient.isConnected()) {
if (mConnectionResult == null) {
mConnectionProgressDialog.show();
} else {
try {
mConnectionResult.startResolutionForResult(getActivity(),
REQUEST_CODE_RESOLVE_ERR);
} catch (SendIntentException e) {
// Try connecting again.
mConnectionResult = null;
mPlusClient.connect();
}
}
}
}
@Override
public void onConnectionFailed(ConnectionResult result) {
if (mConnectionProgressDialog.isShowing()) {
// The user clicked the sign-in button already. Start to resolve
// connection errors. Wait until onConnected() to dismiss the
// connection dialog.
if (result.hasResolution()) {
try {
result.startResolutionForResult(getActivity(),
REQUEST_CODE_RESOLVE_ERR);
} catch (SendIntentException e) {
mPlusClient.connect();
}
}
}
}
@Override
public void onConnected(Bundle connectionHint) {
mConnectionProgressDialog.dismiss();
Toast.makeText(getActivity().getApplicationContext(),
"User is connected!", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getActivity().getApplicationContext(),
LogoutActivity.class);
startActivity(intent);
}
@Override
public void onDisconnected() {
// TODO Auto-generated method stub
}
}
Я делал это с официальным руководством, а затем немного переделывал, чтобы использовать его внутри фрагмента.
В основной деятельности у меня есть:
FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
googleSignUpFragment = new GoogleSignUpFragment();
fragmentTransaction.add(R.id.detailFragment, googleSignUpFragment);
fragmentTransaction.commit();
Однако всякий раз, когда я нажимаю кнопку входа в систему, появляется только диалог, который говорит:Вход в систему ... » и больше ничего не происходит. Есть идеи, как решить эту проблему? Он работал нормально внутри нормальной деятельности.
Спасибо за любую помощь.
@Редактировать. Я выяснил, что метод onConnectionFailed не запускается, и поэтому, похоже, onActivityResult отсутствует, но когда я помещаю непосредственно mPlusClient.connect () в свой щелчок, он работает, но я чувствую, что это не совсем правильный способ сделать это. Может проблема в том что onConnectionFailed не beign запущен
@ Редактировать 2. Теперь я выяснил, что проблема, похоже, связана с dialog.isShowing (), так как, когда я удаляю строку, средство выбора учетной записи показывает, сразу после запуска, пробовал со значением bool, что я меняю после нажатия, однако это тоже не работает ...