uni-app 3.3.4 获取定位失败返回 getLocation:fail No location providers available
uni-app 3.3.4 获取定位失败返回 getLocation:fail No location providers available
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:windows 10
HBuilderX类型:正式
HBuilderX版本号:3.3.4
手机系统:Android
手机系统版本号:Android 11
手机厂商:三星
手机机型:Galaxy S20 5G
页面类型:vue
vue版本:vue2
打包方式:云端
示例代码:
```doGetLocation() {
console.log('获取定位')
uni.getLocation({
success: (res) => {
this.hasLocation = true;
this.location = formatLocation(res.longitude, res.latitude);
},
fail: (err) => {
console.log(err)
console.log('结束定位')
// #ifdef MP-BAIDU
if (err.errCode === 202 || err.errCode === 10003) { // 202模拟器 10003真机 user deny
this.showConfirm();
}
// #endif
// #ifndef MP-BAIDU
if (err.errMsg.indexOf("auth deny") >= 0) {
uni.showToast({
title: "访问位置被拒绝"
})
} else {
uni.showToast({
title: err.errMsg
})
}
// #endif
},
complete() {
console.log('结束定位')
}
})
console.log('123123123')
}
操作步骤:
下载官方app demo项目实例,运行到三星s20,点击获取位置
预期结果:
获取到定位
实际结果:
获取定位速度很慢,时好时坏,失败了就会返回下面的信息
{
"errMsg": "getLocation:fail No location providers available.",
"errCode": 2,
"code": 2
}
相关链接:
- [https://ask.dcloud.net.cn/question/137344](https://ask.dcloud.net.cn/question/137344)
- [https://ask.dcloud.net.cn/question/137778](https://ask.dcloud.net.cn/question/137778)
更多关于uni-app 3.3.4 获取定位失败返回 getLocation:fail No location providers available的实战教程也可以访问 https://www.itying.com/category-93-b0.html
用Android Studio 模拟器 模拟 Android 11系统 也会出现一样的问题,获取定位特别慢,偶尔成功偶尔失败
更多关于uni-app 3.3.4 获取定位失败返回 getLocation:fail No location providers available的实战教程也可以访问 https://www.itying.com/category-93-b0.html
用Android Studio模拟器模拟Android10 就没有这个问题
默认上 wgs84 类型,定位慢的问题将会排查。
你看下这里 https://ask.dcloud.net.cn/article/39552 也确认一下自己是否需要 wgs84 类型。
就是需要wgs84的 因为app不是做内陆的。。 之前用wgs84在android 11上没啥问题
回复 d***@whaiw.com: 好的
默认坐标系使用 wgs84,会调用系统定位。目前你的描述是定位失败了.
关于返回错误信息是“No location providers available.”是错误描述有问题后期会修改。目前系统定位的体验取决于系统内部定位模块的机制。不同系统表现不太一致。我们也会不断地去优化系统定位逻辑。如想获取到更优的体验建议更改坐标类型,使用三方定位SDK。
系统的话,就是很普通的android11呀,用的是android studio装的模拟器模拟的,没有国内各种厂商的那些,因为不是内陆的,所以都没有用国内地图厂商提供的sdk,一直用的wgs84系统定位
回复 d***@whaiw.com: 好的 模拟器cpu类型用的arm 还是x86
回复 DCloud_Android_ST: x86
这个错误通常是由于设备定位服务未开启或权限配置问题导致的。以下是几个关键排查点:
-
检查设备定位服务:确保手机已开启GPS和位置服务。在Android 11上,需要进入设置-位置,开启定位功能。
-
权限配置:在manifest.json中确认已添加定位权限:
{
"permissions": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>"
]
}
}
}
- 动态权限请求:Android 6.0+需要动态申请权限。在调用getLocation前,先检查并请求权限:
uni.authorize({
scope: 'scope.userLocation',
success: () => {
uni.getLocation({...})
}
})
- 定位模式设置:尝试指定type参数:
uni.getLocation({
type: 'wgs84',
geocode: true,
// 可尝试添加高精度模式
// isHighAccuracy: true,
// highAccuracyExpireTime: 4000
})

