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
相关产品推荐
相关产品推荐

