You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PendingIntent重复调用失效:如何实现两次推送通知正常触发?

解决两次推送通知仅生效一次的问题

我帮你分析下代码里的问题哈~你现在的代码里,两次创建PendingIntent时用了相同的requestCode(都是0),而且复用了同一个Intent对象,这就导致系统把这两个PendingIntent当成同一个了——后面的pendingIntent2会直接覆盖前面的pendingIntent,所以最终只有第二次的通知能生效。

要解决这个问题,只需要做两个小修改:

  • 给两个PendingIntent设置不同的requestCode(比如0和1),让系统识别为两个独立的任务
  • 其实不需要创建两个AlarmManager实例,一个就足够调用两次set方法,优化一下代码结构

修改后的完整代码如下:

Intent intent = new Intent(MainActivity.this, ReminderBroadcast.class);
// 第一个PendingIntent用requestCode 0
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
// 第二个PendingIntent用requestCode 1,和第一个区分开
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(MainActivity.this, 1, intent, 0);

// 只需要一个AlarmManager实例
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

long timeAtButtonClick = System.currentTimeMillis();
long tenSecondsInMillis = 1000 * 10;
long nextInMillis = 1000 * 20;

// 分别设置两个定时任务
alarmManager.set(AlarmManager.RTC_WAKEUP, timeAtButtonClick + tenSecondsInMillis, pendingIntent);
alarmManager.set(AlarmManager.RTC_WAKEUP, timeAtButtonClick + nextInMillis, pendingIntent2);

简单说下原理:PendingIntent的唯一性是由「requestCode + Intent的action/data/category等属性」共同决定的。只要requestCode不同,哪怕Intent内容一样,系统也会认为是两个不同的PendingIntent,这样两个定时任务就不会互相覆盖啦~

内容的提问来源于stack exchange,提问作者cvvw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 16:42:36