我有一个“请勿打扰”系统,如果当前时间在“请勿打扰范围时间”中,则会使我的Android应用程序的声音静音。 如果我只是在一天之间使用范围时间,则效果很好,但是我不知道如何在一天休息的情况下编写时间,例如在第二天的11:00 pm至第二天的1:00。
这是我用来检测免打扰时间的方法:
private boolean isInDNDTime() {
Calendar now = Calendar.getInstance();
Calendar startTime = Calendar.getInstance();
Calendar endTime = Calendar.getInstance();
MyDate myDate = new MyDate(new Date());
if (isDNDTwoDays()) {
startTime.setTime(myDate.getYesterday().toDate());
startTime.set(Calendar.HOUR_OF_DAY, getDNDStartHourTime());
startTime.set(Calendar.MINUTE, getDNDStartMinuteTime());
endTime.setTime(myDate.getTomorrow().toDate());
endTime.set(Calendar.HOUR_OF_DAY, getDNDEndHourTime());
endTime.set(Calendar.MINUTE, getDNDEndMinuteTime());
} else {
startTime.set(Calendar.HOUR_OF_DAY, getDNDStartHourTime());
startTime.set(Calendar.MINUTE, getDNDStartMinuteTime());
endTime.set(Calendar.HOUR_OF_DAY, getDNDEndHourTime());
endTime.set(Calendar.MINUTE, getDNDEndMinuteTime());
}
return now.after(startTime) && now.before(endTime);
}
答案 0 :(得分:0)
请尝试以下代码
private boolean isInDNDTime() {
Calendar now = Calendar.getInstance();
Calendar startTime = Calendar.getInstance();
Calendar endTime = Calendar.getInstance();
MyDate myDate = new MyDate(new Date());
if (isDNDTwoDays()) {
startTime.add(Calendar.DATE, 1);
endTime.add(Calendar.DATE, 1);
// startTime.setTime(myDate.getYesterday().toDate());
startTime.set(Calendar.HOUR_OF_DAY, getDNDStartHourTime());
startTime.set(Calendar.MINUTE, getDNDStartMinuteTime());
// endTime.setTime(myDate.getTomorrow().toDate());
endTime.set(Calendar.HOUR_OF_DAY, getDNDEndHourTime());
endTime.set(Calendar.MINUTE, getDNDEndMinuteTime());
} else {
startTime.set(Calendar.HOUR_OF_DAY, getDNDStartHourTime());
startTime.set(Calendar.MINUTE, getDNDStartMinuteTime());
endTime.set(Calendar.HOUR_OF_DAY, getDNDEndHourTime());
endTime.set(Calendar.MINUTE, getDNDEndMinuteTime());
}
return now.after(startTime) && now.before(endTime);
}
答案 1 :(得分:0)
有一个现代的API用于执行此类任务,它称为java.time
,可从Java 8中获得。以下示例说明了如何使用几行代码来做到这一点:
public static void main(String[] args) {
// create sample data
LocalDateTime start = LocalDateTime.of(2020, 2, 19, 12, 30);
LocalDateTime timeInDND = LocalDateTime.now();
LocalDateTime end = LocalDateTime.of(2020, 2, 21, 12, 30);
// just check if the time is equal to start or end or is between them
if (timeInDND.equals(start) || timeInDND.equals(end)
|| (timeInDND.isAfter(start) && timeInDND.isBefore(end))) {
System.out.println(timeInDND.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
+ " is in the DND period");
} else {
System.err.println(timeInDND.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
+ " is not in the DND period");
}
}
不幸的是,您对低于26的Android API级别的支持需要外部库ThreeTen Android Backport,因为java.time
在API级别26中可用。您可以查看有关以下问题的其他信息how to use the ThreeTenABP。