You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

每次请求位置权限都必须展示「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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:54:02