在进入问题之前,让我解释一下我在做什么。最终,我想在每周的某些日子发送不同的通知。我已经能够通过一个通知来让它工作。当我尝试设置多个通知时会出现问题。所以在我的 MainController 的 OnCreate 方法中,我正在调用一个名为 setAlarm 的函数并传递变量:setAlarm(this, 3, 14, 04, 1, 1);其中“this”是上下文,3 是一周中的某一天,14 是一小时,04 是一分钟,1 是一秒,最后 1 是我所说的通知 ID。这是 setAlarm 函数:public void setAlarm(Context context2, int dayofweek, int hourofday, int dayminute, int daysecond, int notiID){ Intent alarmIntent = new Intent(this, AlarmReceiver.class); alarmIntent.putExtra("VALUE", notiID); PendingIntent pendingIntent = PendingIntent.getBroadcast(context2, 0, alarmIntent, 0); AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.DAY_OF_WEEK, dayofweek); calendar.set(Calendar.HOUR_OF_DAY, hourofday); calendar.set(Calendar.MINUTE, dayminute); calendar.set(Calendar.SECOND, daysecond); Date date = calendar.getTime(); //manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 0, pendingIntent); manager.setExact(AlarmManager.RTC_WAKEUP, date.getTime(),pendingIntent); }我在此功能中所做的是设置警报管理器以在一周中的某一天、某个时间触发。我知道一旦触发它就会调用我设置的 AlarmReceiver 类。但我也通过我设置的 alarmIntent 意图将整数变量传递给 AlarmReceiver 类。如您所见,我将 int 变量 Value 传递给类,只要我只调用一次 setAlarm 函数,它就可以正常工作。但我正试图让这个工作来设置多个通知。我期望发生的是,我使用通知 ID (notiID) 调用 setAlarm 函数,并在指定的时间触发警报管理器,并将额外的变量值与执行流程一起传递给 alarmReceiver 类。在 Alarm Receiver 类中,我设置了一个 if 语句来测试变量“值”以查看它是 1 还是 2,并基于此,将触发并显示在手机上的通知。发生的事情是当我两次调用 setAlarm 函数时,从未收到第一个通知。更奇怪的是,收到了第二个通知,但它的变量“值”是 1,而不是我期望的 2。例如:所以我调用 setAlarm 并将闹钟设置为在周二 12:05:01 响起,并通过 notiID 为 1。然后我再次调用 setAlarm 并将闹钟设置为在周二 12:06:01 响起,并传递 2 的 notiID。在 12:05:01,什么也没有发生。我应该看到第一个通知,但我没有。在 12:06:01 我收到一条通知,但我看到的是第一个通知,而不是第二个通知。同样,如果我在 AlarmReceiver 类中放置一个断点并查看“值”设置为什么,它会显示设置为 1,而不是 2。所以我不明白发生了什么。我希望任何有使用 Android 8.0.0 及更高版本制作通知经验的人都可以提供帮助。甚至建议采用不同的方式在不同的日子发送不同的通知。
1 回答
![?](http://img1.sycdn.imooc.com/54584dd900014f6c02200220-100-100.jpg)
DIEA
TA贡献1820条经验 获得超2个赞
更改以下行
PendingIntent pendingIntent = PendingIntent.getBroadcast(context2, 0, alarmIntent, 0);
至
PendingIntent pendingIntent = PendingIntent.getBroadcast(context2, notiID, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
添加回答
举报
0/150
提交
取消