uni-app App端 plus.geolocation.watchPosition(..) 且 clearWatch(..) 后 uni.getLocation 报错

uni-app App端 plus.geolocation.watchPosition(…) 且 clearWatch(…) 后 uni.getLocation 报错

开发环境 版本号 项目创建方式
Windows N/A HBuilderX
Android 9.0
OnePlus 7 Pro

bug描述:

App 端

const _GEOLOCATION = plus.geolocation  
const opt = {  
     enableHighAccuracy: true,  
     provider: 'system'  
}  
const watchPositionId = _GEOLOCATION.watchPosition(success, error, opt)  
await timeout(* * 1000)  
_GEOLOCATION.clearWatch(watchPositionId)

以上执行后再执行

_GEOLOCATION.getCurrentPosition(success, error, opt)  
// or  
// uni.getLocation(...)

会报错

"code: 2, No location providers available."

manifest.json

"sdkConfigs": {  
    "geolocation" : {  
        "system" : {  
            "__platform__" : [ "ios", "android" ]  
        }  
    }  
}

示例代码:

操作步骤:

预期结果:

实际结果:


更多关于uni-app App端 plus.geolocation.watchPosition(..) 且 clearWatch(..) 后 uni.getLocation 报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

ios可以
android 确实存在: 执行plus.geolocation.clearWatch plus.geolocation.getCurrentPosition和plus.geolocation.getCurrentPosition和uni.getLocation会返回错误

更多关于uni-app App端 plus.geolocation.watchPosition(..) 且 clearWatch(..) 后 uni.getLocation 报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


官方近期会修福,留意动态

HX3.3.7+已修复该问题

谢谢!

这是一个已知的定位模块资源释放问题。当使用 plus.geolocation.watchPosition() 进行持续定位后,即使调用 clearWatch() 停止了监听,系统定位服务可能仍未完全释放。此时立即调用 getCurrentPosition()uni.getLocation() 会因资源冲突而报错。

解决方案:

  1. 延迟调用:在 clearWatch() 后添加至少 500ms 的延迟再执行获取位置操作。
    _GEOLOCATION.clearWatch(watchPositionId)
    setTimeout(() => {
        _GEOLOCATION.getCurrentPosition(success, error, opt)
    }, 500)
回到顶部