0

我不熟悉BroadcastReceiver和。我正在学习http://developer.android.com/google/gcm/gs.html上的教程ServiceGoogleCloudMessaging

在我将库导入我的工作区并将其引用到我的项目后,我得到了一个运行时异常"No class def found error"。我浏览了 Internet,发现错误可能与我有关AndroidManifest.xml,这可能是有道理的,因为我不知道教程中描述的清单的一些事情。

例如:

<receiver
    android:name=".MyBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.my.package" />
    </intent-filter>
</receiver>
<service android:name=".MyIntentService" />

第一件事是,在教程中,他们声明了一个receiver名称为“MyBroadcastReceiver”但后来他们定义了一个名为“GcmBroadcastReceiver”的类,它扩展了BroadcastReceiver。所以我不知道它们是否是两个不同的东西,或者这是一个错误,它们应该命名相同。

第二件事是Service。教程中没有服务。所以我想我想创建一个服务

第三件事是,我不明白BroadcastReceiverand/or是如何或从哪里Service调用的MainActivity,它们是如何链接在一起的等等。

编辑:我正在使用新的 Google Cloud Messaging API

4

1 回答 1

1

不再需要该服务。它与较旧的 API 一起使用。广播接收器调用它来处理到达的消息和注册结果,但现在所有到达消息的处理都在广播接收器中完成。

您需要一个广播接收器类。不管你怎么称呼它。GcmBroadcastReceiver是他们为演示应用创建的类。顾名思义MyBroadcastReceiver,您应该创建您的 on 类。广播接收器不会从主活动中调用。当 GCM 消息发送到您的应用程序时调用它。

至于您的No class def found error,假设您使用的是 Eclipse,您可能错过了检查 Android 项目中的 Java Build Path -> Order and Export -> Android Private Libraries 标志。

于 2013-07-16T16:45:48.773 回答