后台一键启动
通知栏和锁屏上的媒体卡片直接开始新一轮,不用先打开应用。
特性
就那么几个常用时长,一天要用很多次:不打开应用就能开始,一下就能结束。
通知栏和锁屏上的媒体卡片直接开始新一轮,不用先打开应用。
暂停会取消系统闹钟并冻结剩余时间,继续时从冻结的那一刻接着走。
前台服务循环播放闹钟铃声、振动并点亮屏幕;没人处理时 5 分钟后自动停下。
默认 5 / 15 / 25 / 45 分钟,从微休息到深度专注;可自由增删自定义档位。
每一轮都由你亲手触发,没有任何东西会在背后自己开始。
应用没有声明 INTERNET 权限,从技术上就没有把数据传出去的可能。
试用
下面是主界面与媒体卡的实时复刻:同样的状态、同样的按钮。全部跑在浏览器里,不发任何请求。
媒体卡片
Lap · 25 分钟
点播放键开始计时
拖动进度条可以调整剩余时间。
原理
最早一版把计时交给系统时钟应用。在小米 HyperOS 上它撞得很具体:应用处于后台时,系统时钟的界面根本不让打开。
在通知栏点播放键,调用的是 Lap 自己;系统不会代为发起跳转。于是 Lap 必须以后台应用的身份去拉起另一个应用的 Activity。
悬浮窗权限、系统「链式启动」开关、提升进程优先级、PendingIntent 后台启动模式,全部无效。系统日志把拒绝记成 MIUI 自己的权限拦截。
改用 AlarmManager.setAlarmClock() 加前台响铃服务后,全程不跨应用边界:问题消失,连带不再需要悬浮窗权限。
对系统时钟尝试过的方案
| 尝试 | 结果 |
|---|---|
| 授予 SYSTEM_ALERT_WINDOW(Android 后台启动豁免) | Android 层放行,MIUI 再加一层 |
| 系统设置里打开「链式启动」 | 已开启,仍被拒绝 |
| 先拉起前台服务提升进程优先级 | 日志没有任何变化 |
| setPendingIntentBackgroundStartMode | 被系统丢弃 |
| 用 cmd appops 改 MIUI 策略 | 没有对应开关 |
两个值得知道的副作用:setAlarmClock 会在状态栏显示闹钟图标;它不受省电模式和待机分组限制。
权限
六个权限,每个都对应一个看得见的行为。通知权限在第一次点开始时才申请,不是一打开应用就弹窗。
拒绝通知权限,计时控件就无法显示;除此之外没有任何变化,也不涉及你的个人数据。
不做全屏响铃页
目标机型拒绝 fullScreenIntent,所以响铃表现为通知 + 铃声 + 亮屏。
静音不会让它安静
铃声走闹钟音量(USAGE_ALARM)。要静音请调低闹钟音量或开启勿扰。
切换档位不影响当前轮
已开始的这一轮保持原时长,新档位从下一轮开始生效。