这只发生在我的Kyocera Rise上。我有一个应用程序依赖于GCM在手机之间进行通信。我的Nexus 4和我的HTC One X之间的通信工作正常,每当我发送推送通知时,两个手机都会收到com.google.android.c2dm.intent.RECEIVE操作的意图。但是,在Kyocera Rise上运行完全相同的代码会产生完全不同的结果:每当我发送推送通知时,收到的意图都会使用“未注册”的额外参数执行com.google.android.c2dm.intent.REGISTRATION操作。即使我在成功注册Google的几秒钟内发送推送通知(我必须成功检索用于推送的设备ID),结果仍然是未注册的消息。为什么呢?
编辑:这里有一个更清晰的图片,说明发生了什么。 我所有的其他手机:我注册手机 - >我发送推送通知 - >手机收到com.google.android.c2dm.intent.RECEIVE意图并附加消息Kyrocera Rise:我注册了手机 - >我等待任何时间(如果是0秒或5分钟没关系,将不会收到单个推送通知) - >我发送推送通知 - >手机立即通过“未注册”额外参数接收com.google.android.c2dm.intent.REGISTRATION意图
编辑2:清单的相关部分:
<receiver
android:name="edu.neu.madcourse.wanfunglee.comm.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="edu.neu.madcourse.wanfunglee.comm" />
</intent-filter>
</receiver>
<meta-data
android:name="com.google.android.gms.version"
android:value="4242000" />
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="edu.neu.madcourse.wanfunglee.comm.permission.C2D_MESSAGE" />
答案 0 :(得分:2)
确保您的应用程序的主程序包在C2D_MESSAGE权限的清单和GCM广播接收器的类别中使用。