如何让通知管理员无法获得过去的时间?

时间:2016-04-13 20:29:15

标签: android notifications android-notifications notify notificationmanager

我不知道标题是否清楚,我与通知管理器的问题是当我将时间设置为(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);

1 个答案:

答案 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));
        }
    }