如何基于LocalTime列表创建通知?

我有一个LocalTime列表,我需要循环抛出它们并分别返回小时和分钟以将它们添加到通知中

当我单独对待它们时,可以使用getHour()或getMinute()方法,但在列表中不起作用

String q = "01:00:00";
String w = "02:00:00";
String e = "03:00:00";
String r = "04:00:00";

LocalTime qq = LocalTime.parse(q);
LocalTime ww = LocalTime.parse(w);
LocalTime ee = LocalTime.parse(e);
LocalTime rr = LocalTime.parse(r);

List<LocalTime> listTimes = new ArrayList<>();
        listTimes.add(qq);
        listTimes.add(ww);
        listTimes.add(ee);
        listTimes.add(rr);


for(int i=0 ; i<=listTimes.size() ; i++) {
                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY,listTimes.get(i).getHour());
                calendar.set(Calendar.MINUTE,listTimes.get(i).getMinute());
                calendar.set(Calendar.SECOND,listTimes.get(i).getSecond());


         Intent intent = new Intent(getapplicationContext(),Notification_reciever.class);

                PendingIntent pendingIntent = PendingIntent.getBroadcast(getapplicationContext(),100,intent,PendingIntent.flaG_UPDATE_CURRENT);

                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInmillis(),AlarmManager.INTERVAL_DAY,pendingIntent);      
     }

通知的实际创建:

public void onReceive(Context context,Intent intent) {

    Notificationmanager notificationmanager = (Notificationmanager) context.getSystemService(context.NOTIFICATION_SERVICE);


    int notificationId = 1;
    String channelId = "channel-01";
    String channelName = "Channel Name";
    int importance = Notificationmanager.IMPORTANCE_HIGH;

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        NotificationChannel mChannel = new NotificationChannel(
                channelId,channelName,importance);
        notificationmanager.createNotificationChannel(mChannel);
    }


    Intent repeating_intent = new Intent(context,Reaptingactivity.class);

    repeating_intent.setflags(Intent.flaG_actIVITY_CLEAR_TOP);

    PendingIntent pendingIntent = PendingIntent.getactivity(context,repeating_intent,PendingIntent.flaG_UPDATE_CURRENT);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context,channelId).setContentIntent(pendingIntent).setSmallIcon(R.drawable.ic_free_breakfast_black_24dp)
            .setContentTitle("Notificatio Title").setContentText("Notification message").setautoCancel(true);

    notificationmanager.notify(notificationId,builder.build());


}

当我单独设置通知而不使用for循环时,通知没有问题,但是当我为列表添加循环时,通知不起作用

landaming 回答:如何基于LocalTime列表创建通知?

我将停止使用java.util.Calendar并完全切换到java.time

如果您有一个时间列表,并且想要将其与当前日期结合在一起(我猜您通过使用java.util.Calendar.getInstance()),则可以将今天的java.time.LocalDate与已解析的日期结合起来LocalTimejava.time.LocalDateTime并利用其可能性以毫秒为单位:

public static void main(String[] args) {
    String q = "01:00:00";
    String w = "02:00:00";
    String e = "03:00:00";
    String r = "04:00:00";

    LocalTime qq = LocalTime.parse(q);
    LocalTime ww = LocalTime.parse(w);
    LocalTime ee = LocalTime.parse(e);
    LocalTime rr = LocalTime.parse(r);

    List<LocalTime> listTimes = new ArrayList<>();
    listTimes.add(qq);
    listTimes.add(ww);
    listTimes.add(ee);
    listTimes.add(rr);

    // find out what day today is and do that outside the loop
    LocalDate today = LocalDate.now();

    // iterate/stream all the parsed times
    listTimes.forEach(time -> {
        // combine the time with today
        LocalDateTime dateTime = LocalDateTime.of(today,time);
        // then convert it to an Instant (choose the offset you need) and get the millis
        long timeInMillis = dateTime.atZone(ZoneId.systemDefault())
                                .toInstant()
                                .toEpochMilli();

        Intent intent = new Intent(getApplicationContext(),Notification_reciever.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,// use the millis here then
                                    timeInMillis,AlarmManager.INTERVAL_DAY,pendingIntent);
    });
}
本文链接:https://www.f2er.com/3081170.html

大家都在问