从谷歌这个例子中不明白

时间:2013-12-02 15:45:16

标签: java android google-cloud-messaging

我正在尝试了解如何在我的Android应用中使用Google Cloud消息,所以我发现这个公会是由Google编写的,但有些东西我不明白。

如果Google Play服务在设备上可用,则此方法会返回true,如果没有,则会打开安装/更新Play服务的选项:

private boolean checkPlayServices() {
    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                PLAY_SERVICES_RESOLUTION_REQUEST).show();
        } else {
            Log.i(TAG, "This device is not supported.");
            finish();
        }
        return false;
    }
    return true; 
}

另外,他们覆盖了onResume()方法:

protected void onResume() {
    super.onResume();
    checkPlayServices(); 
}

在主要活动的onCreate()方法中,他们编写了以下代码:

if (checkPlayServices()) {
    gcm = GoogleCloudMessaging.getInstance(this);
    regid = getRegistrationId(context);

    if (regid.isEmpty()) {
        registerInBackground();
    }
} else {
    Log.i(TAG, "No valid Google Play Services APK found.");
}

假设需要更新Google Play服务,变量resultCode的值将不同于ConnectionResult.SUCCESS,因此会创建对话框,返回值将为false。但是,如果返回值为false,即使使用确实更新了Play服务,也不会进行注册过程。

1 个答案:

答案 0 :(得分:0)

看起来即使它第一次返回false,OnResume()方法可能会再次触发checkPlayService(),这应该返回true,这将在用户更新Play服务后发生。

注册逻辑不会执行。由于这只是演示GCM的演示应用程序,因此他们没有添加任何内容来处理该场景。似乎假设用户可能已经存在Play服务。在那种情况下,用户必须离开应用程序并重新输入它。您可以对onResume()方法进行修改,以执行与onCreate()相同的逻辑。