在进入问题之前,让我解释一下我在做什么。
最终,我想在每周的某些日子发送不同的通知。我已经能够通过一个通知来让它工作。当我尝试设置多个通知时会出现问题。
所以在我的 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 及更高版本制作通知经验的人都可以提供帮助。甚至建议采用不同的方式在不同的日子发送不同的通知。
DIEA
相关分类