添加每天重复的闹钟,更改日期为2天后再改回来,前面两天的闹钟不会响

本文主要是介绍添加每天重复的闹钟,更改日期为2天后再改回来,前面两天的闹钟不会响,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

添加每天重复的闹钟,更改日期为2天后再改回来,前面两天的闹钟不会响

[DESCRIPTION]


操作步骤:
1. 当前时间为5月30号14:00,设置闹钟为14:05,每天重复
2. 更改系统时间为6月1号,再次更改为5月30号到14:05时,闹钟不会响。
实际结果:
到14:05时,闹钟不会响。


[SOLUTION]


系统时间发生变化的时候,Alarm时间不能随之而变,导致闹钟不响应
麻烦修改文件AlarmStateManager.JAVA。修改fixAlarmInstances 为如下形式:
public static void fixAlarmInstances(Context context) {
/// M: record for duplicated instance, and delete them
HashMap<Long, AlarmInstance> duplicatedInstance = new HashMap<Long, AlarmInstance>();
// Register all instances after major time changes or when phone restarts
// TODO: Refactor this code to not use the overloaded registerInstance method.
ContentResolver contentResolver = context.getContentResolver();
for (AlarmInstance instance : AlarmInstance.getInstances(contentResolver, null)) {
/// M: record for duplicated instance, and delete them @{
if (duplicatedInstance.get(instance.mAlarmId) == null) {
duplicatedInstance.put(instance.mAlarmId, instance);
} else {
// Delete current instance
AlarmInstance.deleteInstance(contentResolver, instance.mId);
continue;
}
/// @}
/// M: Fix the alarm when time changed
instance = getFixedAlarmInstance(context, instance);
AlarmStateManager.registerInstance(context, instance, false);
}
AlarmStateManager.updateNextAlarm(context);
}
并添加方法:
/** M: Update the alarmInstances who can be set a nearly time @{ */
private static AlarmInstance getFixedAlarmInstance(Context context, AlarmInstance
instance) {
ContentResolver resolver = context.getContentResolver();
Alarm alarm = Alarm.getAlarm(resolver, instance.mAlarmId);
Calendar currentTime = Calendar.getInstance();// the system's current time
// Generate the new instance use the alarm's rule
AlarmInstance newInstance = alarm.createInstanceAfter(currentTime);
Calendar newTime = newInstance.getAlarmTime();// the new instance's time
Calendar alarmTime = instance.getAlarmTime();// the original instance's time
// If the new instance's time is before the original instance's time
// then we can use the new instance's year,month and day with original instance's
// hour and minutes, so that we can keep all the state of the alarm
if (newTime.before(alarmTime)) {
// use the new instance time, update the year,month and day
int newYear = newTime.get(Calendar.YEAR);
int newMonth = newTime.get(Calendar.MONTH);
int newDay = newTime.get(Calendar.DAY_OF_MONTH);
alarmTime.set(Calendar.YEAR, newYear);
alarmTime.set(Calendar.MONTH, newMonth);
alarmTime.set(Calendar.DAY_OF_MONTH, newDay);
// if the alarmTime is still before currentTime, then add a day
while (alarmTime.before(currentTime)) {
alarmTime.add(Calendar.DAY_OF_MONTH, 1);
}
instance.setAlarmTime(alarmTime);
AlarmInstance.updateInstance(resolver, instance);
}
return instance;
}
/** @} */


这篇关于添加每天重复的闹钟,更改日期为2天后再改回来,前面两天的闹钟不会响的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/300844

相关文章

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Java日期类详解(最新推荐)

《Java日期类详解(最新推荐)》早期版本主要使用java.util.Date、java.util.Calendar等类,Java8及以后引入了新的日期和时间API(JSR310),包含在ja... 目录旧的日期时间API新的日期时间 API(Java 8+)获取时间戳时间计算与其他日期时间类型的转换Dur

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

PyCharm如何更改缓存位置

《PyCharm如何更改缓存位置》:本文主要介绍PyCharm如何更改缓存位置的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm更改缓存位置1.打开PyCharm的安装编程目录2.将config、sjsystem、plugins和log的路径

Java如何用乘号来重复字符串的功能

《Java如何用乘号来重复字符串的功能》:本文主要介绍Java使用乘号来重复字符串的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java乘号来重复字符串的功能1、利用循环2、使用StringBuilder3、采用 Java 11 引入的String.rep

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息