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
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() 会因资源冲突而报错。
解决方案:
- 延迟调用:在
clearWatch()后添加至少 500ms 的延迟再执行获取位置操作。_GEOLOCATION.clearWatch(watchPositionId) setTimeout(() => { _GEOLOCATION.getCurrentPosition(success, error, opt) }, 500)

