Android应用在调用connect()方法时出现GoogleApiClient崩溃

3
我的应用程序在googleApiClient.connect()时没有任何错误消息而崩溃。它从未到达onConnectionFailed。这是我的代码:

MainActivity中:

public class MainMenu extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    public static final int REQUEST_LEADERBOARD = 1;
    public static int SCREEN_WIDTH;
    public static int SCREEN_HEIGHT;
    private GoogleApiClient googleApiClient;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        SCREEN_WIDTH = metrics.widthPixels;
        SCREEN_HEIGHT = metrics.heightPixels;

        googleApiClient = new GoogleApiClient.Builder(this)
                .addApi(Games.API).addScope(Games.SCOPE_GAMES)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();
    }

    public void newGame(View view) {
        Intent intent = new Intent(MainMenu.this, Game.class);
        startActivity(intent);
        finish();
    }

    public void highScore(View view) {
        if (isSignedIn()) {
            startActivityForResult(Games.Leaderboards.getLeaderboardIntent(googleApiClient,
                    String.valueOf(R.string.leaderboard_id)), REQUEST_LEADERBOARD);
        }
        else {
            System.out.println("not sign in");
        }
    }

    @Override
    public void onConnected(Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        System.out.println("failed");
    }

    @Override
    protected void onStart() {
        super.onStart();
        googleApiClient.connect(); //here it crashed
    }

    private boolean isSignedIn() {
        return (googleApiClient != null && googleApiClient.isConnected());
    }
}

我的工作:

我已经生成了签名的APK,也拥有SHA1密钥。我将应用程序发布进行了Alpha测试。

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="my.package"
          android:versionCode="2"
          android:versionName="1.1">
    <uses-sdk android:minSdkVersion="1"/>



    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"
                 android:theme="@style/Theme.AppCompat.NoActionBar"
                 android:isGame="true" >

        <meta-data
                android:name="com.google.android.gms.games.APP_ID"
                android:value="@string/app_id" />
        <meta-data
                android:name="my.package.version"
                android:value="com.google.android.gms.version" />


        <activity android:name=".activities.MainMenu">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".activities.Game"/>
        <activity android:name=".activities.GameOver"/>
        <activity android:name=".activities.HighScore"/>
    </application>
</manifest>

我正在安装了Google Play服务的设备上进行测试。你能帮我吗?


3
你能否同时贴出程序崩溃的堆栈跟踪信息? - Andrei Mărcuţ
您没有访问互联网的权限。请添加 <uses-permission android:name="android.permission.INTERNET" /> - Andrei Mărcuţ
你的设备是否已安装了 Google Play 服务? - Shvet
1
设备只显示弹出窗口,通知应用程序崩溃了。堆栈跟踪不会出现在设备上,它应该在Android Studio的控制台或logcat中。 - BSMP
嗯,崩溃的原因是Google Play服务API已更新。 以前它是一个接口,现在它是一个抽象类。 - PrincessLeiha
显示剩余4条评论
2个回答

0

你应该在清单文件中添加网络权限。

<uses-permission android:name="android.permission.INTERNET"/>

如果您需要更多帮助,您应该展示错误堆栈跟踪。
希望它能对您有所帮助!

那没什么帮助..就像我说的,没有错误信息。 - Miso Blauf

0

解决方案很简单

<meta-data
    android:name="my.package.version"
    android:value="com.google.android.gms.version" />

这是无意义的。

应该是这样的:

<meta-data
     android:name="com.google.android.gms.version"
     android:value="@integer/google_play_services_version" />

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