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

Android 14下cordova-diagnostic-plugin调用isLocationAuthorized始终返回NOT_REQUESTED

解决cordova-diagnostic-plugin返回NOT_REQUESTED的问题

你遇到的NOT_REQUESTED状态,核心原因是权限从未被实际发起请求,而非权限配置遗漏。结合你的情况,按以下步骤排查:

1. 先确认是否主动调用了权限请求方法

isLocationAuthorized()仅用于查询权限状态,不会自动触发权限请求。必须先调用requestLocationAuthorization()来唤起系统权限弹窗,示例代码:

document.addEventListener("deviceready", function() {
    // 必须在deviceready事件触发后调用插件方法
    cordova.plugins.diagnostic.requestLocationAuthorization(
        function(status) {
            // 请求完成后再检查权限状态
            cordova.plugins.diagnostic.isLocationAuthorized(function(authorized) {
                console.log("位置权限是否授权:" + authorized);
            });
        },
        function(error) {
            console.error("请求权限失败:" + error);
        },
        // Android 10+ 请求后台权限需指定ALWAYS模式
        cordova.plugins.diagnostic.locationAuthorizationMode.ALWAYS
    );
}, false);

2. 匹配Android版本的权限请求逻辑

  • Android 10(API 29)及以上:后台位置权限(ACCESS_BACKGROUND_LOCATION)不能直接请求,需先获取前台位置权限(ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION),再单独请求后台权限;或者在requestLocationAuthorization时指定ALWAYS模式,让系统一次性询问前台+后台权限(Android 11+支持此方式)。
  • 确保config.xml中配置了正确的目标SDK版本,比如适配Android 13的配置:
<preference name="android-targetSdkVersion" value="33" />

3. 验证插件版本与配置

  • 卸载并重新安装最新版插件,旧版本可能存在权限状态判断的bug:
cordova plugin rm cordova.plugins.diagnostic
cordova plugin add cordova.plugins.diagnostic@latest

4. 重置应用权限状态

卸载当前应用后重新安装测试,避免之前的权限操作记录干扰状态判断,重置后能准确反映首次请求的权限状态。

你的权限配置本身没有遗漏,问题出在权限请求的执行流程上,按上述步骤调整即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:42:34