android - Google 登录按钮没有任何反应

标签 android facebook google-plus

我正在使用 Facebook 和 Google+ API 在我的第一个(登录) Activity 中为两者创建一个登录按钮。我只是按照开发人员页面上的教程将它们一起实现了。 Facebook 按钮工作正常,但当我点击 google+ 按钮时没有任何反应。我做错了什么?

代码:

登录 Activity :

import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.plus.Plus;

public class LoginActivity extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks,GoogleApiClient.OnConnectionFailedListener, OnClickListener {

private static String APP_ID="685980371496839";     //for facebook

/* Request code used to invoke sign in user interactions. */
  private static final int RC_SIGN_IN = 0;

  /* Client used to interact with Google APIs. */
  private GoogleApiClient mGoogleApiClient;

  /* A flag indicating that a PendingIntent is in progress and prevents
   * us from starting further intents.
   */
  private boolean mIntentInProgress;

  /* Track whether the sign-in button has been clicked so that we know to resolve
   * all issues preventing sign-in without waiting.
   */
  private boolean mSignInClicked;

  /* Store the connection result from onConnectionFailed callbacks so that we can
   * resolve them when the user clicks sign-in.
   */
  private ConnectionResult mConnectionResult;



FacebookFragment facebookFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_login);
    //findViewById(R.id.sign_in_button).setOnClickListener(this);
    if (savedInstanceState == null) 
    {
        // Add the fragment on initial activity setup
        facebookFragment = new FacebookFragment();
        getSupportFragmentManager().beginTransaction().add(android.R.id.content, facebookFragment).commit();
    } 
    else 
    {
        // Or set the fragment from restored state info
        facebookFragment = (FacebookFragment) getSupportFragmentManager().findFragmentById(android.R.id.content);
    }


    mGoogleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN).build();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.login, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

protected void onStart() {
    super.onStart();
    mGoogleApiClient.connect();
  }

protected void onStop() {
    super.onStop();

    if (mGoogleApiClient.isConnected()) {
      mGoogleApiClient.disconnect();
    }
  }

@Override
public void onConnectionFailed(ConnectionResult result) {
    // TODO Auto-generated method stub

    if (!mIntentInProgress) {
        // Store the ConnectionResult so that we can use it later when the user clicks
        // 'sign-in'.
        mConnectionResult = result;

        if (mSignInClicked) {
          // The user has already clicked 'sign-in' so we attempt to resolve all
          // errors until the user is signed in, or they cancel.
          resolveSignInError();
        }
      }

}

@Override
public void onConnected(Bundle arg0) {
    // TODO Auto-generated method stub
    mSignInClicked = false;
      Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show();
}

public void onDisconnected() {
    // TODO Auto-generated method stub

}

protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
    if (requestCode == RC_SIGN_IN) {
        if (responseCode != RESULT_OK) {
          mSignInClicked = false;
        }

        mIntentInProgress = false;

        if (!mGoogleApiClient.isConnecting()) {
          mGoogleApiClient.connect();
        }
      }
    }

public void onConnectionSuspended(int cause) {
      mGoogleApiClient.connect();
    }

public void onClick(View view) {
      if (view.getId() == R.id.sign_in_button
        && !mGoogleApiClient.isConnecting()) {
        mSignInClicked = true;
        resolveSignInError();
      }
    }

private void resolveSignInError() {
      if (mConnectionResult.hasResolution()) {
        try {
          mIntentInProgress = true;
          //startIntentSenderForResult(mConnectionResult.getIntentSender(),RC_SIGN_IN, null, 0, 0, 0);
          mConnectionResult.startResolutionForResult(this,RC_SIGN_IN);
        } catch (SendIntentException e) {
          // The intent was canceled before it was sent.  Return to the default
          // state and attempt to connect to get an updated ConnectionResult.
          mIntentInProgress = false;
          mGoogleApiClient.connect();
        }
      }
    }


}

点击 google+ 按钮时的 LogCat:

07-16 08:35:30.580: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.580: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.580: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.580: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/Effect_Tick.ogg
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/KeypressStandard.ogg
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressStandard.ogg
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/KeypressSpacebar.ogg
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressSpacebar.ogg
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/KeypressDelete.ogg
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressDelete.ogg
07-16 08:35:30.590: E/SoundPool(1270): error loading /system/media/audio/ui/KeypressReturn.ogg
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressReturn.ogg
07-16 08:35:30.590: E/SoundPool(1270): error loading        /system/media/audio/ui/KeypressInvalid.ogg
07-16 08:35:30.590: W/AudioService(1270): Soundpool could not load file: /system/media/audio/ui/KeypressInvalid.ogg
07-16 08:35:30.590: W/AudioService(1270): onLoadSoundEffects(), Error -1 while loading   samples

最佳答案

如果 mConnectionResult 的 hasResolution() 方法失败,我建议您显示错误消息,这让我解决了问题,在我的情况下,这是由于 google play 服务版本之间的兼容性问题。因此,通过更改以下内容的 resolveSignInErrors,您将获得有关可能出现问题的更详细的响应:

private void resolveSigInErrors() {
    if(mConnectionResult.hasResolution()){

        try {
            startIntentSenderForResult(mConnectionResult.getResolution().getIntentSender(),RC_SIGN_IN,null,0,0,0);
        } catch (IntentSender.SendIntentException e) {
            e.printStackTrace();
            mGoogleApliClient.connect();
        }
    }
    else {
        // Show dialog using GooglePlayServicesUtil.getErrorDialog()
        GooglePlayServicesUtil.showErrorDialogFragment(mConnectionResult.getErrorCode(),this,RC_SIGN_IN);

    }
}

这将在 Google Play 服务提供的特殊 View 中打印出了什么问题,它甚至可以帮助您解决错误。

关于android - Google 登录按钮没有任何反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24781085/

相关文章:

安卓相机 : stopPreview vs releaseCamera

android - 小部件 setOnClickPendingIntent

android: 初始屏幕上的空指针

android - 在 Android 应用程序中集成 Facebook+Parse 时出错

android - 如果用户在 ViewPager 中向左或向右滑动,是否可以拦截触摸事件并转移到 ListView

android-facebook friend 个人资料图片在 ListView 中膨胀

Facebook,查询不同时期的多个洞察指标

javascript - 尝试检索经过身份验证的 Google+ 用户的电子邮件地址时获取 "gapi.client is undefined"

javascript - 带有开放图谱协议(protocol)的 Google+ 片段

ios - Google+ 原生共享对话立即消失