You need to enable JavaScript to run this app. React Native 0.59升级Android API 29后如何申请后台定位权限
优惠活动
大模型
产品
解决方案
定价
更多

React Native 0.59升级Android API 29后如何申请后台定位权限

Android API 29+ React Native 后台定位权限获取方案

核心规则说明

Android 10(API 29)对后台定位权限的申请逻辑做了强制性调整:

  • 必须先成功获取前台定位权限(ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION),才能申请后台定位权限
  • 不可同时申请前台+后台定位权限,否则系统不会展示「始终允许」选项
  • React Native 0.59版本的PermissionsAndroid未内置ACCESS_BACKGROUND_LOCATION常量,需要手动传入完整权限字符串

修改后的权限申请代码

export async function requestLocationPermission() {
    try {
        // 第一步:先申请前台定位权限
        const foregroundGranted = await PermissionsAndroid.request(
            PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION
        );

        if (foregroundGranted !== PermissionsAndroid.RESULTS.GRANTED) {
            // 前台定位未授权,直接返回对应结果
            return foregroundGranted === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN 
                ? PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN 
                : PermissionsAndroid.RESULTS.DENIED;
        }

        // 第二步:前台定位授权通过后,申请后台定位权限
        const backgroundGranted = await PermissionsAndroid.request(
            // RN 0.59无内置常量,手动传入完整权限字符串
            "android.permission.ACCESS_BACKGROUND_LOCATION"
        );

        if (backgroundGranted === PermissionsAndroid.RESULTS.GRANTED) {
            // 前后台权限都已获取
            return PermissionsAndroid.RESULTS.GRANTED;
        } else if (backgroundGranted === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN) {
            return PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN;
        } else {
            // 后台权限被拒,仅获得前台定位权限,可根据业务需求调整返回值
            return "foreground_granted";
        }
    } catch (err) {
        return false;
    }
};

补充注意事项

  • 若后续将targetSdkVersion升级到30(Android 11)及以上,后台定位权限申请逻辑会再次变更:系统不会直接弹出授权弹窗,会自动跳转至应用权限设置页,需要用户手动选择「始终允许」选项
  • 若应用需要上架Google Play,必须明确向用户说明后台定位的具体使用场景,否则会被平台拒审

内容的提问来源于stack exchange,提问作者Riku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:18:03