移动终端 2012 年 10 月 31 日

Android Tasker应用之农历节气和自定义节日小插件

该文章介绍了如何使用Tasker和Minimalistic Text在Android平台上自定义一个农历挂件,具有显示阳历日期及星期、农历年、日期、节气、农历节日、阳历节日、自定义纪念日等功能。文章提供了农历和节日算法的实现代码,并且讲解了如何将自定义的纪念日添加到代码中。该文章对于想要在Android平台上自定义农历挂件的用户有一定的参考价值。
Android平台上虽然支持农历的插件不少,但找来找去都没找到满意的,最终还是决定用Tasker和Minimalistic Text自己做一个,效果似乎不错,如图:
lunar widget
主要功能:
  • 1、阳历日期及星期显示
  • 2、农历年、日期显示
  • 3、节气显示和预测
  • 4、农历节日显示
  • 5、阳历节日显示
  • 6、自定义纪念日、长辈生日等显示
功能是不是很全呢?下面一起来定制这样一个插件。

STEP 1: 农历和节日算法

由于这个挂件涉及了大量的数据处理,使用Tasker自带的流程控制显然比较难实现,这里我们使用了Javascript来做这部分处理。
点此下载 lunar.zip,解压后放到/sdcard/Tasker/download目录。
打开lunar.js文件,你可以看到一系列已经定义好的节日,其中LunarHolidays是农历节日和纪念日,yangliHolidays是阳历节日和纪念日。你可以将自定义的纪念日,长辈的农历生日添加进去,格式为月日节日
add custom holidays
说明:
代码中使用了收集自网络的农历算法,来源如下:
由于网络资源的高冗余性,我无法确定农历算法和节气算法的原作者,在此深表歉意!如果你是上面提到两份代码的原作者,欢迎联系我注明版权信息,谢谢!

STEP 2: 创建Tasker桌面显示任务

由于操作比较繁琐,这里直接提供好我配置好的任务,点此下载:lunar_date_to_MT.tsk_.zip,解压后在Tasker的Tasks标签下导入。
任务打开后是这样的:
lunar date to MT task
从上图可以看出这个任务的主要功能就是将%myangli%mlunar%jieqi%holiday的值传给Minimalistic Text显示,其中%holiday包含农历节日、阳历节日和自定义节日。这四个值全部由lunar.js计算(STEP 5),你可以不必关注具体的实现过程。
请点击右下角的“播放”按钮运行一次(这样做的目的是计算一次局部变量值并发给Minimalistic Text,在配置Minimalistic Text时可以直接显示)。

STEP 3: 配置Minimalistic Text 显示

在主屏上添加一个2x2的Minimalistic Text插件,将布局改成Custom Layout后进入自定义布局设置。
在STEP 2中Tasker传递了四个变量,因此在Minimalistic Text需要接收这四个变量并显示。
Add(点“+”号) -> Misc -> Local Variable,变量名称写%DYANGLI,样式可以自己定义,如下图:
custom layout
重复上面的步骤添加另外三个变量,名称分别为%DNONGLI%DJIEQI%DHOLIDAY。保存退出,桌面上已经能显示农历了。

STEP 4: 自动和手动更新日期

由于日期每天都会变,插件上的农历当然也需要自动改变。
考虑到省电方面,建议大家通过闹钟来触发插件的更新(大部分人早上都应该有个闹钟吧?),起床闹钟一响,插件上的日记和节日就自动更新了。大部分人可能一天有几个闹钟,比如晚上的睡觉闹钟,因此需要在加一个时间段限制,比如只有在早上7点到9点的闹钟响起时才会自动更新。
最终的Profile下载:auto_update_lunar_on_alarm.prf,解压后在Tasker的Profile标签页下导入:
update lunar on alarm profile
这里还有一个问题:插件的显示是在每天早上闹钟响时更新的,万一半夜2点想看一下农历呢(此时显示还是昨天的)。解决这个问题最好的办法就是添加一个手动更新快捷键:当点击桌面的文字时触发更新插件任务。
在Minimalistic Text中打开农历插件的 Preferance ,在 Tab behavior Start another activity ,然后点 Select an activity or shortcut 打开对话框,在对话框的 Shortcuts 标签下选择Tasker 的 Task Cut ,然后选择lunar date to MT 任务就完成了。
select activity
select task cut
OK,手动更新配置完成,只要点一下插件的文字就可以手动更新了,方便那些半夜睡不着觉想看农历的…