2016-04-21 94 views
1

我工作在一個聊天應用程序,並嘗試使用谷歌雲消息 下面這個教程:的Android GCM消息重複

http://hmkcode.com/android-google-cloud-messaging-tutorial/

它工作正常,但通知傳遞多次, 即:如果我發送「你好」,會有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); 
} 
+0

請發送GcmListener服務類的代碼。 – Dhruv

+0

可能你有兩個接收器。 – inkedTechie

+0

好吧,我正在完成另一個開發人員的應用程序,所以我不是很好GCM 你的意思是GCM處理程序類嗎? – Radwa

回答

0

沒有資格評論這樣的代碼中有一個答案張貼此。它很好,你正在嘗試使用GCM服務器,而不是讓你自己的服務器來完成這項工作。但是,如果你有時間,請查看android的socket.io庫。你也需要了解node.js。只是建議做出更好的應用程序。

+0

不幸的是,我沒有時間,但無論如何感謝 – Radwa

1

請檢查以下官方GCM線程,它定義了谷歌方面存在的一些錯誤。

https://groups.google.com/forum/#!topic/android-gcm/EHZUTEJMeyw

現在作爲一個解決方案,你可以做的是,從服務器的GCM響應一起,通過一些隨機的唯一ID和處理GCM消息只有當ID是唯一的,因爲這個ID也將被複制的ID表明GCM消息被複制。

+0

它不會是一個大問題,如果它只重複一次大部分無論如何,它發送六個通知,因爲我會嘗試你的解決方案 – Radwa