uni-app中plus.geolocation.watchPosition一直提示获取定位权限失败

uni-app中plus.geolocation.watchPosition一直提示获取定位权限失败

开发环境 版本号 项目创建方式
Windows window10企业版 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:window10企业版

HBuilderX类型:正式

HBuilderX版本号:3.1.6

手机系统:Android

手机系统版本号:Android 11

手机厂商:华为

手机机型:mate20

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

### 操作步骤:
见bug描述

### 预期结果:
设置定位权限后将app切到界面上时能正常获取定位信息

### 实际结果:
刚打开页面的时候没有定位权限,后续就算设置了定位权限但是还是一直提示获取定位权限失败

### bug描述:
vue页面加载的时候plus.geolocation.watchPosition返回{"code":22,"message":"获取定位权限失败"}

然后到设置=>应用=>权限开启定位权限,在将app切换到界面上显示出来,此时触发onshow方法重新调用plus.geolocation.watchPosition获取位置信息  

此时还是返回{"code":22,"message":"获取定位权限失败"},但是奇怪的是我用plus.android.requestPermissions判断定位权限确实是获取到了的.  

然后我也用了uni.getLocation也是提示我获取定位权限失败,返回上一个页面再次打开这个页面也是提示{"code":22,"message":"获取定位权限失败"}  

我必须重启app才能正常获取到定位权限

更多关于uni-app中plus.geolocation.watchPosition一直提示获取定位权限失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app中plus.geolocation.watchPosition一直提示获取定位权限失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中遇到plus.geolocation.watchPosition持续返回权限失败错误(code 22),即使已手动开启定位权限,通常是由于系统权限状态未及时同步或应用未主动触发权限更新所致。以下是关键排查点:

  1. 动态权限请求缺失:Android 6.0+ 要求运行时动态申请权限。确保在调用定位前执行:

    uni.authorize({
      scope: 'scope.userLocation',
      success: () => { /* 再调用watchPosition */ }
    });
    

    或使用 uni.getSetting 检查权限状态后引导用户开启。

  2. 应用生命周期影响:从设置页返回应用时,系统可能未自动激活定位模块。尝试在 onShow 中延迟执行定位请求:

    setTimeout(() => {
      plus.geolocation.watchPosition(...);
    }, 300);
回到顶部