具有唯一ID的通知将被覆盖

时间:2018-02-17 13:36:12

标签: android push-notification notifications alarmmanager notificationmanager

我正在构建一个应用程序,用户可以订阅在特定时间获取通知。但是,当我尝试一个接一个地发出两个通知时,事情变得非常糟糕。

我的代码:

    myObject.setNotificationId((int) ((new Date().getTime() / 1000L) % Integer.MAX_VALUE)); // unique
    Intent intent = new Intent(context.getApplicationContext(), 
    NotificationReceiver.class);
    intent.putExtra("object", objectToJson(myObject)); //GSON


    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, myObject.getNotificationId(),
            intent, PendingIntent.FLAG_ONE_SHOT);


        Calendar c = Calendar.getInstance();
        c.setTime(// the time user has chosen);


        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        // will trigger even if device goes to sleep mode
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 120000L, pendingIntent);
        Log.v(TAG, "Notification is setup.");

我已经重复了2分钟,看它是否有效。

NotificationRecevier类 - onReceive方法

NotificationManager notificationManager =
   (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent moreDetailsIntent = new Intent(context, 
    MoreDetailsActiviy.class); //open this when clicked


moreDetailsIntent.setAction(Long.toString(System.currentTimeMillis()));// dummy code

String strObj = intent.getStringExtra("object");
        MyObject myObject = new Gson().fromJson(strObj, MyObject.class);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, myObject.getNotificationId(),
                moreDetailsIntent, PendingIntent.FLAG_ONE_SHOT);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                .setContentIntent(pendingIntent)
                .setSmallIcon(R.drawable.icon)
                .setContentTitle("Title")
                .setContentText("SOME TEXT HERE")
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setDefaults(Notification.DEFAULT_ALL)
                .setAutoCancel(true);

        notificationManager.notify(myObject.getNotificationId(), builder.build());

我的测试: 时间是13:10。将通知设置为从13:14开始并每2分钟运行一次。 (身份1)。设置另一个通知,以13:17开始,每2分钟运行一次。 (id 2)

  1. 时间是13:14 - 第一个通知(ID为1)触发
  2. 时间是13:16 - 第一次通知应该再次触发,但不是
  3. 时间是13:17 - 第二次通知(ID为2)触发
  4. 时间是13:18 - 第一次通知应该再次触发,但不是
  5. 时间是13:19 - 第二次通知应该再次触发,但不是
  6. 之后没有任何事情发生。

    我尝试将FLAG_ONE_SHOT更改为FLAG_UPDATE_CURRENT

    时间是13:20。将通知设置为从13:22开始,每2分钟运行一次。 (身份1)。设置另一个通知,以13:33开始,每2分钟运行一次。 (id 2)

    1. 时间是13:22 - 第一个通知(ID为1)触发
    2. 时间是13:24 - 第一次通知再次发出
    3. 时间是13:26 - 第一次通知再次发出
    4. 时间是13:28 - 第一次通知再次发出
    5. 时间是13:30 - 第一次通知再次发出
    6. 时间是13:32 - 第一次通知应该再次触发,但不是
    7. 时间是13:33 - 两个通知同时发生
    8. 时间是13:34 - 第一次通知应该再次触发,但不是
    9. 时间是13:35 - 两个通知同时发生
    10. 它继续这样。为什么会这样?

      感谢。对不起凌乱的代码。

0 个答案:

没有答案