GCM通知处理并避免在相同活动中打开活动

时间:2015-09-13 07:56:22

标签: android notifications push-notification google-cloud-messaging

我正在开发使用GCM服务的应用程序。 我可以使用代码发送通知

mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Intent msgMainActivity = new Intent(this, MainActivity.class);
msgMainActivity.putExtra("msg", msg);
msgMainActivity.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,msgMainActivity, PendingIntent.FLAG_CANCEL_CURRENT);

//  contentIntent.
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("appName Notification")
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(sndr+": "+msg)
            .setNumber(notifNo); //static id notifNo

// Set notification sound
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    mBuilder.setSound(alarmSound);
    mBuilder.setAutoCancel(true);
    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(notifNo++, mBuilder.build()); // separate notifications each time

主要活动中的接收者就像

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Bundle notificationData = intent.getExtras();
String notifMessage = notificationData.getString("msg");
// rest code for appending notifMessage in file.txt
}

当user1通过gcm通知向另一个用户发送数据时,user2收到它并且选择能够在他的设备上写入文件 我面临一些问题,如:  1.当User1连续发送3-4条消息时,所有内容都会因mNotificationManager.notify(notifNo++, mBuilder.build());而单独显示,我想避免这些消息,并按顺序发送所有3-4个消息列表作为通知。
 2.当user2通过通知接收消息并且处于同一活动时,请避免通知并直接写入活动中的文件/接收 注意:我这样做是为了进行多播推送通知,因此当任何用户离线时,折叠密钥可能不允许超过4个用户/消息。
如果重复并发布建议链接,请原谅。

2 个答案:

答案 0 :(得分:0)

您可以使用以下方法创建一个帮助程序类,以跟踪当前打开的活动。

/** A set which maintains the visible activities **/
private static final Collection<String> sVisiblePages = new HashSet<>();

/** Call this when your Page becomes visible, tracking ID is the 
unique ID for an activity (You can use class name) */
public static void markPageAsVisible(String trackingID){
    sVisiblePages.add(trackingID);
}

 /** Whether or not a page with this tracking ID is visible to the user. */
public static boolean isPageVisible(String trackingID){
    return sVisiblePages.contains(trackingID);
}

/**
 * Marks this page as hidden upon validating that it is indeed going into background
 * and not getting re-created due to an orientation change.
 * */
public static void markPageAsHidden(Activity activity, String trackingID){
    if(!activity.isChangingConfigurations()) markPageAsHidden(trackingID);
}

答案 1 :(得分:0)

我在StackOverflow问题上找到了一些帮助。 在HandleIntent上,我做了一些改动,比如,

  
      
  1. 当User1连续发送3-4条消息时,由于mNotificationManager.notify(notifNo ++,mBuilder.build()),所有消息都单独显示; ,我想避免并按顺序发送所有3-4个消息的列表作为通知。&#34;
  2.   

为此,我已删除notifNo++以获取相同通知中的所有邮件,我已添加的内容为,

  • 在更改inActivity状态时,我正在制作字符串NotifData = ""
  • 在第一次通知时,我发送的用户通知为NOTIFICATION_ID
  • 当用户收到另一个通知时,请在NotifData后添加换行符。 (你可以评论更好的方法)。
  • 再次onNewIntent(),我正在制作NotifData = ""
  
      
  1. 当user2通过通知接收消息并且处于同一活动时,请避免通知并直接写入活动中的文件/接收。
  2.   

为此,我添加了一个静态布尔变量inActivity,仅当用户当前处于活动屏幕即onCreate(), onNewIntent(), onStart(), onPause()时才会为true,而onStop()等相应方法则为false基于此变量检查,我决定致电mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());请查看this了解详情。