的Android GCM消息重复
我工作在一个聊天应用程序,并尝试使用谷歌云消息 下面这个教程:的Android GCM消息重复
它工作正常,但通知传递多次, 即:如果我发送“你好”,会有6个通知说“你好”! 最少2个通知。
onHandleIntent方法:
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
String messageType = gcm.getMessageType(intent);
mes = extras.getString("content");
if(mes==null)
return;
db=new AppDatabase(this);
boolean isforeground = isForeground("packageName");
MessageData data = new MessageData();
data.setTitle(extras.getString("title"));
data.setContent(extras.getString("content"));
data.setSend_user_name(extras.getString("send_user_name"));
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
String currentDateandTime = sdf.format(new Date());
data.setDate(currentDateandTime);
if (isforeground) {
String activity_group_id = Integer
.toString(MessageActivity.group_id);
if (extras.getString("group_id").equals(activity_group_id)) {
MessageHandler.messageView.addMsg(data);
} else {
showToast(data);
}
} else {
showToast(data);
}
Log.i("GCM",
"Received : (" + messageType + ") "
+ extras.getString("title"));
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
这里是isForeground方法
public boolean isForeground(String myPackage) {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager
.getRunningTasks(1);
ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
return componentInfo.getClassName().equals(myPackage);
}
没有资格评论这样的代码中有一个答案张贴此。它很好,你正在尝试使用GCM服务器,而不是让你自己的服务器来完成这项工作。但是,如果你有时间,请查看android的socket.io库。你也需要了解node.js。只是建议做出更好的应用程序。
不幸的是,我没有时间,但无论如何感谢 – Radwa
请检查以下官方GCM线程,它定义了谷歌方面存在的一些错误。
https://groups.google.com/forum/#!topic/android-gcm/EHZUTEJMeyw
现在作为一个解决方案,你可以做的是,从服务器的GCM响应一起,通过一些随机的唯一ID和处理GCM消息只有当ID是唯一的,因为这个ID也将被复制的ID表明GCM消息被复制。
它不会是一个大问题,如果它只重复一次大部分无论如何,它发送六个通知,因为我会尝试你的解决方案 – Radwa
请发送GcmListener服务类的代码。 – Dhruv
可能你有两个接收器。 – inkedTechie
好吧,我正在完成另一个开发人员的应用程序,所以我不是很好GCM 你的意思是GCM处理程序类吗? – Radwa