## 背景 当前客户端存在以下问题: - 用户已经授予定位权限,但 App 仍反复弹出定位权限提示。 - 语音握手或地理围栏注册时会触发权限申请,导致权限提示时机不一致。 - 前台定位和后台定位使用的是不同权限要求,但当前引导流程没有区分。 - 权限被拒绝后跳转的系统设置页面不准确。 - 从系统设置返回后,如果权限没有变化,仍会重复弹窗。 - Development Build 中动态加载 `expo-location` 可能失败,导致权限状态被误判为未授权。 ## 目标 统一并修复定位权限流程: 1. 静态加载 `expo-location`,确保真实 Development Build 可以正确读取权限状态。 2. 在 App 启动阶段集中处理权限申请。 3. 前台提醒只申请前台定位权限。 4. 后台提醒和地理围栏只在需要时申请后台定位权限。 5. 根据当前缺少的权限跳转到对应的系统设置页面。 6. 从系统设置返回后,如果权限状态未改变,不重复提示同一权限。 7. 定位 Provider、地理围栏 Monitor 和语音握手只读取权限状态,不主动申请权限。 ## 验收标准 - 已授予前台定位权限时,重新打开 App 不再弹出定位权限提示。 - 已授予后台定位权限时,创建后台地理提醒不再重复提示。 - 前台提醒和后台提醒分别进入正确的权限申请或系统设置流程。 - 用户拒绝权限后,可以看到明确的设置入口,不会出现无限弹窗。 - 从系统设置返回且权限未改变时,不会再次立即弹出相同提示。 - 语音握手不会因为定位模块而触发权限申请。 - 地理围栏注册失败时能够返回明确的权限状态或错误原因。 - 现有录音、语音对话和提醒创建流程不受影响。 - 相关单元测试、类型检查、Lint 和格式检查通过。 ## PR 范围 涉及: - 启动时权限协调逻辑 - 原生设备权限能力读取 - 前台/后台定位 Provider - 地理围栏 Monitor - 权限与定位相关测试
背景
当前客户端存在以下问题:
expo-location可能失败,导致权限状态被误判为未授权。目标
统一并修复定位权限流程:
expo-location,确保真实 Development Build 可以正确读取权限状态。验收标准
PR 范围
涉及: