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

10 回复

用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

这个错误通常是由于设备定位服务未开启或权限配置问题导致的。以下是几个关键排查点:

  1. 检查设备定位服务:确保手机已开启GPS和位置服务。在Android 11上,需要进入设置-位置,开启定位功能。

  2. 权限配置:在manifest.json中确认已添加定位权限:

{
  "permissions": {
    "android": {
      "permissions": [
        "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
        "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>"
      ]
    }
  }
}
  1. 动态权限请求:Android 6.0+需要动态申请权限。在调用getLocation前,先检查并请求权限:
uni.authorize({
  scope: 'scope.userLocation',
  success: () => {
    uni.getLocation({...})
  }
})
  1. 定位模式设置:尝试指定type参数:
uni.getLocation({
  type: 'wgs84',
  geocode: true,
  // 可尝试添加高精度模式
  // isHighAccuracy: true,
  // highAccuracyExpireTime: 4000
})
回到顶部