在安卓中实现谷歌 Play 服务。

26

我正在按照这里的教程进行操作,但是在onConnectionFailed类中遇到了错误信息The method getIntentSender() is undefined for the type ConnectionResult

完整代码:

package com.alfalfa.thisthat;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.os.Bundle;
import android.view.Menu;

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

public class LoginActivity extends Activity implements
ConnectionCallbacks, OnConnectionFailedListener {

    /* 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;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(Plus.API, null)
            .addScope(Plus.SCOPE_PLUS_LOGIN)
            .build();
    }

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

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

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

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

    @Override
    public void onConnectionFailed(ConnectionResult result) {
          if (!mIntentInProgress && result.hasResolution()) {
            try {
              mIntentInProgress = true;
              startIntentSenderForResult(result.getIntentSender(),
                  RC_SIGN_IN, null, 0, 0, 0);
            } 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();
            }
          }
        }

    @Override
    public void onConnected(Bundle connectionHint) {
        // We've resolved any connection errors.  mGoogleApiClient can be used to
        // access Google APIs on behalf of the user.
    }

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

    protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
          if (requestCode == RC_SIGN_IN) {
              mIntentInProgress = false;

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

编辑: LogCat

02-13 19:12:31.763: E/AndroidRuntime(21257): FATAL EXCEPTION: main
02-13 19:12:31.763: E/AndroidRuntime(21257): Process: com.alfalfa.thisthat, PID: 21257
02-13 19:12:31.763: E/AndroidRuntime(21257): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.alfalfa.thisthat/com.alfalfa.thisthat.MainActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.alfalfa.thisthat/com.alfalfa.thisthat.LoginActivity}; have you declared this activity in your AndroidManifest.xml?
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.os.Handler.dispatchMessage(Handler.java:102)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.os.Looper.loop(Looper.java:136)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.ActivityThread.main(ActivityThread.java:5017)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at java.lang.reflect.Method.invokeNative(Native Method)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at java.lang.reflect.Method.invoke(Method.java:515)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at dalvik.system.NativeStart.main(Native Method)
02-13 19:12:31.763: E/AndroidRuntime(21257): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.alfalfa.thisthat/com.alfalfa.thisthat.LoginActivity}; have you declared this activity in your AndroidManifest.xml?
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.Activity.startActivityForResult(Activity.java:3424)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.Activity.startActivityForResult(Activity.java:3385)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.Activity.startActivity(Activity.java:3627)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.Activity.startActivity(Activity.java:3595)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at com.alfalfa.thisthat.MainActivity.onCreate(MainActivity.java:16)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.Activity.performCreate(Activity.java:5231)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-13 19:12:31.763: E/AndroidRuntime(21257):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
02-13 19:12:31.763: E/AndroidRuntime(21257):    ... 11 more
2个回答

28

从今天起和Google Play SDK版本15开始,这已被替换为

result.startResolutionForResult(this, // your activity
                                RC_SIGN_IN);

根据更新的文档


如果我将该行更改为上述内容,则LoginActivity类不会显示任何错误,但是如果我从MainActivity向LoginActivity发送意图运行程序,则应用程序会强制关闭。我还有其他做错的地方吗?谢谢。 - Eric Goncalves
如果应用程序强制关闭,请发布您的logcat。 - ianhanniballake
那个错误看起来像是你在清单文件中没有声明其中一个活动,并且与Google Play服务无关。 - ianhanniballake
谢谢,那解决了错误。现在屏幕上显示“发生了内部错误”,并闪烁着。我不确定是什么原因,但我会把它留到另一个问题中再问。感谢您的帮助。 - Eric Goncalves

5

希望这能帮助到您

result.getResolution().getIntentSender()

3
你好,这可能解决问题...但如果你能提供一点关于如何以及为什么它起作用的解释,那就更好了 :) 别忘了 - 在 Stack Overflow 上有很多新手,他们可以从你的专业知识中学到一两件事情 - 对你来说显而易见的东西对他们来说可能并不是那么简单易懂。 - Taryn East

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接