我正在构建一个应用程序,用户可以订阅在特定时间获取通知。但是,当我尝试一个接一个地发出两个通知时,事情变得非常糟糕。
我的代码:
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)
之后没有任何事情发生。
我尝试将FLAG_ONE_SHOT更改为FLAG_UPDATE_CURRENT
时间是13:20。将通知设置为从13:22开始,每2分钟运行一次。 (身份1)。设置另一个通知,以13:33开始,每2分钟运行一次。 (id 2)
它继续这样。为什么会这样?
感谢。对不起凌乱的代码。