Android GCM客户端异常
我最近开始学习Android GCM。我正在尝试Android Developer中提供的GCM客户端示例,当我尝试单击MainActivity中的send按钮时,它给了我一些异常,如下所示:Android GCM客户端异常,android,push-notification,google-cloud-messaging,Android,Push Notification,Google Cloud Messaging,我最近开始学习Android GCM。我正在尝试Android Developer中提供的GCM客户端示例,当我尝试单击MainActivity中的send按钮时,它给了我一些异常,如下所示: 09-06 00:16:41.480: E/AndroidRuntime(1246): FATAL EXCEPTION: main 09-06 00:16:41.480: E/AndroidRuntime(1246): java.lang.RuntimeException: Unable to insta
09-06 00:16:41.480: E/AndroidRuntime(1246): FATAL EXCEPTION: main
09-06 00:16:41.480: E/AndroidRuntime(1246): java.lang.RuntimeException: Unable to instantiate receiver com.google.android.gcm.demo.app.GcmBroadcastReceiver: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gcm.demo.app.GcmBroadcastReceiver" on path: DexPathList[[zip file "/data/app/com.google.android.gcm.demo.app-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.google.android.gcm.demo.app-1, /vendor/lib, /system/lib]]
09-06 00:16:41.480: E/AndroidRuntime(1246): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2405)
09-06 00:16:41.480: E/AndroidRuntime(1246): at android.app.ActivityThread.access$1500(ActivityThread.java:141)
09-06 00:16:41.480: E/AndroidRuntime(1246): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1332)
09-06 00:16:41.480: E/AndroidRuntime(1246): at android.os.Handler.dispatchMessage(Handler.java:99)
09-06 00:16:41.480: E/AndroidRuntime(1246): at android.os.Looper.loop(Looper.java:137)
09-06 00:16:41.480: E/AndroidRuntime(1246): at android.app.ActivityThread.main(ActivityThread.java:5103)
09-06 00:16:41.480: E/AndroidRuntime(1246): at java.lang.reflect.Method.invokeNative(Native Method)
09-06 00:16:41.480: E/AndroidRuntime(1246): at java.lang.reflect.Method.invoke(Method.java:525)
09-06 00:16:41.480: E/AndroidRuntime(1246): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-06 00:16:41.480: E/AndroidRuntime(1246): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-06 00:16:41.480: E/AndroidRuntime(1246): at dalvik.system.NativeStart.main(Native Method)
09-06 00:16:41.480: E/AndroidRuntime(1246): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gcm.demo.app.GcmBroadcastReceiver" on path: DexPathList[[zip file "/data/app/com.google.android.gcm.demo.app-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.google.android.gcm.demo.app-1, /vendor/lib, /system/lib]]
09-06 00:16:41.480: E/AndroidRuntime(1246): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
09-06 00:16:41.480: E/AndroidRuntime(1246): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
09-06 00:16:41.480: E/AndroidRuntime(1246): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
09-06 00:16:41.480: E/AndroidRuntime(1246): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2400)
09-06 00:16:41.480: E/AndroidRuntime(1246): ... 10 more
(很抱歉,由于声誉不足,我无法发布图片。)
我正在使用仿真器,如下所示
目标:谷歌API等级-18
并添加了谷歌账号(我认为这不是必要的,因为我使用的是安卓4.3)
在服务器端,我尝试构建WCF服务并发送HTTP POST请求,得到以下响应:
“状态:200-正常
id=0:1378440485753994%921c249af9fd7ecd
此外,我还尝试在使用GCM测试服务器,并得到以下响应
“{“多播id”:6425765079749845115,“成功”:1,“失败”:0,“规范id”:0,“结果”:[{“消息id”:“0:1378441452317757%921c249af9fd7ecd”}”
所以我认为服务器端不是问题
我希望有人在客户端、模拟器设置等方面纠正我的错误
顺便说一句,我还将“google-play-services_lib”导入到我的包浏览器中,并将“gcm.jar”和“gcm src.jar”添加到项目的Java构建路径中
提前谢谢
更正:当单击演示客户端应用程序中的按钮时,会导致上述异常
以下日志显示从服务器发送GCM的时间
09-06 01:13:51.580: W/BroadcastQueue(274): Unable to launch app com.google.android.gcm.demo.app/10057 for broadcast Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10 pkg=com.google.android.gcm.demo.app (has extras) }: process is bad
09-06 01:13:51.610: W/GTalkService(466): [DataMsgMgr] broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.google.android.gcm.demo.app (has extras) }
框架无法找到broadcastreceiver。您需要在清单文件中声明 在接收器标签内:
<receiver
android:name="com.google.android.gcm.demo.app.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<!-- Receives the actual messages. -->
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<!-- Receives the registration id. -->
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="PACKAGE_NAME" />
</intent-filter>
</receiver>
试试这个:
转到Project/Properties/Java Build Path/Order and Export——确保在Android依赖项和支持库前面有一个复选框(如果您使用它)。标记所有复选框。单击Apply并清除项目
添加如下内容:
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.test.android" />
</intent-filter>
</receiver>
它应该是:com.google.android.gcm.GCMBroadcastReceiver
而不是.GCMBroadcastReceiver
这对我有用。希望这能有所帮助。例外情况仍然存在。。。我想知道下面的“在路径上:DexPathList[[zip文件”//data/app/com.google.android.gcm.demo.app-1.apk“],nativeLibraryDirectories=[/data/app-lib/com.google.android.gcm.demo.app-1,/vendor/lib,/system/lib]”是什么意思?请将清单和广播接收器类添加到问题中。