30

我正在尝试GCM在我的应用程序中工作(当我们的时间发生变化或我们有任何促销活动时通知用户),但Cannot resolve symbol 'GoogleCloudMessaging'在尝试使用 Google Cloud Messaging API 时我不断收到错误消息。

我正在使用新发布的 Android Studio IDE 来编写代码。

这是我的 GcmBroadcastReciever.java 代码:

import android.R;
import android.app.Activity;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class GcmBroadcastReceiver extends BroadcastReceiver 
{
    static final String TAG = "GCMDemo";
    public static final int NOTIFICATION_ID = 1;
    private NotificationManager mNotificationManager;
    Context ctx;
    GoogleCloudMessaging gcm; // I get the error here

    @Override
    public void onReceive(Context context, Intent intent) {
        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context); //error
        ctx = context;
        String messageType = gcm.getMessageType(intent); //cannot resolve method here
        if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { //error
            sendNotification("Send error: " + intent.getExtras().toString());
        } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) { //error
            sendNotification("Deleted messages on server: " +
                    intent.getExtras().toString());
        } else {
            sendNotification("Received: " + intent.getExtras().toString());
        }
        setResultCode(Activity.RESULT_OK);
    }

    // Put the GCM message into a notification and post it.
    private void sendNotification(String msg) {
        mNotificationManager = (NotificationManager)
                ctx.getSystemService(Context.NOTIFICATION_SERVICE);

        PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
                new Intent(ctx, Activity.class), 0);

        Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show();
    }
}
4

6 回答 6

35

以下部分将指导您完成设置 GCM 实施的过程。在开始之前,请确保设置 Google Play 服务 SDK。您需要此 SDK 才能使用 GoogleCloudMessaging 方法。严格来说,您唯一绝对需要此 API 的是上游(设备到云)消息传递,但它还提供了推荐的简化注册 API。

您是否设置了 Google Play 服务 SDK

你必须 :

  1. 安装 Google Play 服务 SDK
  2. 在您的 Android 项目中引用<android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/库项目。

要安装用于开发的 Google Play 服务 SDK:

 1. Launch the SDK Manager.
     - From Eclipse (with ADT), select Window > Android SDK Manager.
     - On Windows, double-click the SDK Manager.exe file at the root of the Android
       SDK directory.
     - On Mac or Linux, open a terminal and navigate to the tools/ directory in 
       the Android SDK, then execute android sdk.
 2. Install the Google Play services SDK.
    Scroll to the bottom of the package list, expand Extras, select Google Play 
    services, and install it. 
    The Google Play services SDK is saved in your Android SDK environment at
    <android-sdk>/extras/google/google_play_services/.
 3. Install a compatible version of the Google APIs platform. 
    If you want to test your app on the emulator, expand the directory for
    Android 4.2.2 (API 17) or a higher version, select Google APIs, and
    install it. Then create a new AVD with Google APIs as the platform target. 
    Note: Only Android 4.2.2 and higher versions of the Google APIs platform
    include Google Play services.
于 2013-05-18T02:21:26.133 回答
10

如果您使用的是 Android Studio:

1) 下载 Google Play SDK(使用 SDK 管理器):

SDK 管理器

2) 不要忘记点击“Synch Project with Gradle Files”按钮

使用 Gradle 文件同步项目

这对我有用。

于 2013-11-26T17:16:47.610 回答
6

如果您在 Android Studio 中,请确保build.gradle您拥有:

dependencies {
    compile 'com.google.android.gms:play-services:7.8.0'
}

然后运行build

这对我有用。

于 2015-09-21T19:48:10.653 回答
4

确保在 build.gradle > Sync > Build - Clean Project 上添加了依赖项。

为我工作:)

于 2016-04-05T06:30:40.360 回答
3

尝试清理您的项目。为我工作。

于 2015-12-15T21:49:36.767 回答
2

您可能使用的是旧教程,但 GCMRegistrar 是一个已弃用的 API 类。

请改用GoogleCloudMessaging API。

使用 gcm检查此以获取完整的教程推送通知

于 2015-10-15T09:29:14.770 回答