我不知道标题是否清楚,我与通知管理器的问题是当我将时间设置为(1:00,2:00,3:00,4:00)和现在的时间是2:30,正常通知将等到3:00然后4:00,但在我的代码中,通知管理器给我两个警报1:00和2:00因为过去,然后等到3: 00然后通知4:00并通知,所以我的问题是过去的时间我不想收到通知。
我的代码 主class.java,alertTimes是一个以毫秒为单位的数组
for (int i = 0; i < alertTimes.length; i++) {
inte = new Intent(this, AlertMedicine.class);
inte.putExtra("id", i);
inte.putExtra("name", NameOftimes[i]);
alarmManager.set(AlarmManager.RTC_WAKEUP, alertTimes[i], PendingIntent.getBroadcast(this, 1, inte, PendingIntent.FLAG_UPDATE_CURRENT));
}
AlertReceiver.java
createNotification(context, "OK", "OK", "OK" + j, 1, 0);
我也尝试在AlertReceiver.java中执行此操作,但这也无法正常工作
if(calendar.get(Calendar.HOUR_OF_DAY)< Integer.parseInt(arr[id].substring(0, 2))) {
createNotification(context, "OK", "OK", "OK" + j, 1, 0);
}
else
if(calendar.get(Calendar.HOUR_OF_DAY)== Integer.parseInt(arr[id].substring(0, 2))){
int min=Integer.parseInt(arr[id].substring(3, 5))+2;
if(calendar.get(Calendar.MINUTE) <= min){
createNotification(context, "OK", "OK", "OK" + j, 1, 0);
答案 0 :(得分:0)
您应该仅为未来时间安排警报,因为set()
将在过去声明的触发时间后立即触发警报。
请参阅以下文档:
public void set(int type,long triggerAtMillis,PendingIntent 操作)在API级别1中添加
安排闹钟。注意:用于计时操作(刻度,超时等) 使用Handler更容易,也更有效。如果有 已经为同一个IntentSender安排了一个警报 警报将首先被取消。如果规定的触发时间在 过去,警报会立即触发。如果已经有了 预定此Intent的警报(两个意图相等) 由filterEquals(Intent))定义,然后它将被删除 取而代之的是。
因此,要解决您的问题,请检查您需要设置的闹钟时间是否在未来,然后只设置否则忽略,
for (int i = 0; i < alertTimes.length; i++) {
if( alertTimes[i] >= System.currentTimeMillis()){
inte = new Intent(this, AlertMedicine.class);
inte.putExtra("id", i);
inte.putExtra("name", NameOftimes[i]);
alarmManager.set(AlarmManager.RTC_WAKEUP, alertTimes[i], PendingIntent.getBroadcast(this, i+1, inte, PendingIntent.FLAG_UPDATE_CURRENT));
}
}