每次请求位置权限都必须展示「Location Access」提示吗?
可以仅向用户展示一次该位置权限说明提示,无需每次请求位置权限都重复弹出,只要符合以下政策要求即可合规:
合规注意事项
- 首次展示的说明必须完整覆盖所有位置权限使用场景:需明确告知用户,位置权限会用于日常签到、签退时的出勤地点核验,同时说明权限使用的范围、频次,不得仅描述单次操作的用途
- 权限说明提示必须严格放在系统原生位置权限请求弹窗之前展示,不得后置
- 仅当用户主动关闭过应用的位置权限后,下次重新请求权限时才需要重新展示该说明,其余场景下仅首次展示即可
技术实现参考
你可以在应用本地持久化存储中新增一个hasShownLocationRationale的标记位,核心逻辑示例:
// 请求位置权限前的前置判断逻辑 fun checkAndRequestLocationPermission() { val isPermissionGranted = checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED if (isPermissionGranted) { // 已授权,直接执行签到/签退逻辑 doCheckInCheckOut() return } val sp = getSharedPreferences("app_config", Context.MODE_PRIVATE) val hasShownRationale = sp.getBoolean("hasShownLocationRationale", false) // 用户之前拒绝过权限时也需要重新展示说明,符合系统权限交互规范 if (!hasShownRationale || shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) { // 展示权限说明弹窗 showLocationRationaleDialog { // 用户确认后拉起系统权限申请弹窗 requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_CODE_LOCATION) sp.edit().putBoolean("hasShownLocationRationale", true).apply() } } else { // 已展示过说明,直接调用系统权限请求 requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_CODE_LOCATION) } }
内容的提问来源于stack exchange,提问作者ThinkAndCode
相关产品推荐
相关产品推荐

