Tasker 夜间模式自动化 从简单定时到日出日落动态调整
什么是好的夜间模式
很多人以为"夜间模式 = 屏幕变深色"。一个好的 Tasker 夜间模式应该覆盖:
| 维度 | 应该变化的设置 |
|---|---|
| 视觉 | 深色/夜间模式开、屏幕亮度大幅降低、屏幕超时延长(但不是永不关) |
| 声音 | 勿扰模式、通知音量静音、振动关闭、仅闹钟允许发声 |
| 网络 | Wi-Fi 可保留(下载后台更新)、移动数据可关闭、蓝牙可关闭 |
| 电池 | 省电模式、降低后台刷新、限制后台活动 |
| 通知 | 只有紧急联系人/闹钟通过 |
把所有这些设置打包进一个 Profile,就是一个完整的夜间模式。
基础版:定时夜间模式
Profile 设计
Profile:夜间睡眠模式
Context:Time → 23:00 - 次日 07:00
Enter Task(完整的进入动作):
1. Night Mode → 强制开(系统级深色模式)
2. Auto Brightness → Off
3. Brightness Percent → 10%(极低亮度但不摸瞎)
4. Screen Timeout → 1 分钟
5. Do Not Disturb → 完全静默(或仅闹钟)
6. Ringer Volume → 0%
7. Vibration → Off
8. Bluetooth → Off
9. Mobile Data → Off(可选,如果想彻底断网)
10. Wi-Fi → On(保留下载/备份)
11. Power Save Mode → On
12. Notify(常驻)→ "夜间模式 · 07:00 后恢复"
Exit Task:
1. Night Mode → 跟随系统(或强制关)
2. Auto Brightness → On
3. Screen Timeout → 30 秒
4. Do Not Disturb → Off
5. Ringer Volume → 恢复(用变量保存的值)
6. Vibration → On
7. Bluetooth → On
8. Mobile Data → On
9. Power Save Mode → Off
10. Notify → "已退出夜间模式"
跨午夜时间窗口的处理
Time Context 设置 23:00 到次日 07:00 时,Tasker 自动处理跨午夜——开始时间晚于结束时间就意味着"到次日同一时间结束"。
Exit Task 会在 07:00 准时执行,恢复所有设置。
进阶版:根据日出日落动态调整
固定时间的问题:冬季天黑得早,夏季天黑得晚。你可能希望:
- 冬季:21:30 进入夜间模式
- 夏季:22:30 进入
Tasker 没有内置日出日落时间,但可以通过以下方式实现:
方案一:调用天气 API
Profile:根据日出日落调整夜间模式
Time → 21:00 - 08:00(宽范围,粗筛)
AND
State → Variable Value → %IsNightTime = 1(由 API 决定)
# %IsNightTime 由另一个定时 Task 更新:
Task:定时更新日出日落
Time → 每天 18:00(或更频繁,如每 6 小时)
1. HTTP Request → 从 OpenWeather / 其他 API 获取当前位置的日出日落时间
2. JavaScriptlet → 比较当前时间与日出日落,设置 %IsNightTime = 1 或 0
方案二:基于屏幕状态和传感器
Profile:屏幕长时间关闭 → 自动进入睡眠辅助模式
State → Display State = Off
AND
State → Proximity Sensor(手机在口袋/枕边)= Near
AND
Time → 22:00 - 07:00
Enter Task:执行夜间睡眠辅助动作(比完整夜间模式温和,因为可能只是打个盹)
Exit Task:屏幕开 → 自动恢复
进阶版:阅读模式与夜间模式叠加
在夜间模式下打开阅读 App(电子书、漫画、网文)时,亮度应该再降低一点、屏幕超时应该延长一点:
Profile:夜间阅读模式
State → Night Mode Profile 已激活
AND
App → 阅读类 App(小说 App / 漫画 App / Kindle)
Enter Task:
1. Brightness Percent → 5%(更暗)
2. Screen Timeout → 5 分钟
3. Display Sleep → Off(自动亮屏,不手动关)
4. Say → "阅读模式已开启"(如果是语音控制)
Exit Task(退出阅读 App 时):
1. Brightness Percent → 10%(恢复夜间基础亮度)
2. Screen Timeout → 1 分钟
3. Display Sleep → 恢复正常
进阶版:充电 vs 不充电的区别
充电时可以保留更多后台功能(因为不耗电),不充电时要更激进:
Enter Task:
# 先检查是否在充电
If → %CHARGING = 1
# 充电中:温和的夜间模式
Do Not Disturb → 仅闹钟
Bluetooth → On(保持智能手表连接)
Power Save Mode → Off(反正插电了)
Else
# 不充电:激进省电
Do Not Disturb → 完全静默
Bluetooth → Off
Power Save Mode → On
Mobile Data → Off
Endif
进阶版:"就寝"和"起床"两个 Profile
把夜间模式拆成两个独立 Profile 更灵活:
Profile 1:进入就寝(23:00 触发)
Enter Task:
# 设置当前时间戳
Variable Set %SleepStartTime, %TIME
# 执行完整夜间进入动作
...
Exit Task:(不再需要,由 Profile 2 覆盖)
Profile 2:起床(07:00 触发)
Enter Task:
# 计算睡眠时间
JavaScriptlet:
var start = tasker.getGlobal("%SleepStartTime");
// 计算差值...
tasker.setGlobal("%SleepDuration", "8 小时");
# 显示睡眠时长(健康追踪)
Notify → "昨晚睡了 %SleepDuration"
# 恢复所有设置
...
这样可以额外实现睡眠追踪、起床闹钟、晨间推送天气等扩展。
退出时的"软恢复"
Exit Task 里恢复所有设置时,考虑用渐变而不是瞬间切换:
Exit Task:
1. Brightness Percent → 20%(先不一下子到 100%)
2. Wait → 30 秒
3. Brightness Percent → Auto
这样从夜间低亮度切到白天时眼睛不会被突然晃到。
夜间模式的调试
如果发现 Exit Task 没按时执行:
- 检查 Time Context 的跨午夜设置是否正确
- 检查有没有其他 Profile 在 07:00 左右干扰(比如另一个 Profile 同时在执行)
- 用 Tasker 运行日志看 07:00 时发生了什么
- 确认 Tasker 电池优化没把它冻结
更多排查见 Profile 不触发怎么办。