## 背景 时间/地点提醒目前有几个可靠性缺口: 1. 原生闹钟响铃声音不区分提醒强度——不管 low/medium/high,响铃行为几乎一样,达不到"高强度持续响、低强度提示一下"的设计预期。 2. 原生精确闹钟一旦因为系统限制(厂商省电策略、进程被杀等)没能真正挂上,目前没有任何兜底机制发现和补救——用户不会再收到这条提醒,直到下次打开 App 触发一次 rebuild。 3. 地点提醒展示时缺少"原生全屏响铃优先"的统一路径,跟时间提醒的展示体验不一致,两条路径分别维护。 ## 方案 - 原生闹钟新增三档铃声(`none`/`ping`/`full`),按提醒强度换算:低=一次性提示音不震动,中=提示音+震动,高=循环响铃+震动,全部改由原生 `RingActivity`/`AlarmSoundService` 统一承接,不再跟 JS 侧的弹窗/播放抢事件。 - 时间型提醒的原生闹钟触发/响铃 UI 全权交给原生侧,JS 只负责注册和状态同步。 - 新增后台守护任务(`ReminderGuardCoordinator` + `reminderGuardTask`):定期核对"该挂上原生闹钟的日程有没有真的挂上",没挂上就补挂;系统围栏不可用/失效时提供持续定位轮询兜底。 - 地点提醒和时间提醒统一走 `presentNow` 原生全屏响铃优先路径,`presentNow` 本身不可用(iOS、或原生模块拿不到)时才回退到 JS 通道。 ## 验收标准 - [x] 低/中/高三档提醒强度在真机上响铃行为可区分(提示音次数、是否震动、是否持续响)。 - [x] 模拟闹钟未挂上的场景下,后台守护任务能在下个轮询周期内补挂闹钟。 - [x] 地点提醒触发时优先走原生全屏响铃页,跟时间提醒体验一致。 - [x] 现有 JS/原生单测全部通过。 ## 不做 - 不改动本地 TTS 播报(见后续 PR)。 - 不改动 SQLite 连接生命周期或围栏半径/轮询策略(见后续 PR)。
背景
时间/地点提醒目前有几个可靠性缺口:
方案
none/ping/full),按提醒强度换算:低=一次性提示音不震动,中=提示音+震动,高=循环响铃+震动,全部改由原生RingActivity/AlarmSoundService统一承接,不再跟 JS 侧的弹窗/播放抢事件。ReminderGuardCoordinator+reminderGuardTask):定期核对"该挂上原生闹钟的日程有没有真的挂上",没挂上就补挂;系统围栏不可用/失效时提供持续定位轮询兜底。presentNow原生全屏响铃优先路径,presentNow本身不可用(iOS、或原生模块拿不到)时才回退到 JS 通道。验收标准
不做