微信小程序实现后台定位和实时位置更新

最近在做小程序时遇到了一个棘手的问题,通过uni.getLocation方法只能在小程序中才能获取用户位置,但我们业务场景需要小程序在切到后台时也能持续不断的获取位置信息,在查看了文档之后我又重新调整了方案,才最终实现了小程序前后台位置获取和位置实时更新,这个过程踩了不少坑,我把完整的步骤和避坑方法详细罗列出来,希望能帮到大家!

0.前置准备:完善用户隐私协议

使用小程序所有位置相关api之前必须在微信公众平台里完善用户协议,具体步骤:账号设置--服务内容声明--用户隐私保护协议:去完善。点击去完善,把位置信息授权加上,工作日提交审核后一般当天就能审核通过。

1.开始使用

1.1 文件中配置地理位置用途说明

我使用的是uniapp,所以我需要在manifest.json配置,使用原生微信小程序配置内容是一样的,只不过是需要在app.json中配置说明,代码贴在下面:

 //这段代码是用来配置获取位置的用途说明,说明可以自己根据业务需求写,也可以随便写,卡的不严
"permission" : {
            "scope.userLocation" : {
                "desc" : "需要获取用户位置"
            }
        },
//下面这段代码是需要把你小程序用到的地理位置相关的api写上,为了方便起见,我全都罗列进去了
"requiredPrivateInfos" : [ "getLocation","startLocationUpdateBackground","startLocationUpdate","onLocationChange" ],

1.2 位置授权

因为我要获取小程序前后台位置,所以我使用的是uni.startLocationUpdateBackground这个api,那么授权时就需要用户同意我们获取他的前后台位置,我们对应的选择的scope为‘scope.userLocationBackground’,具体代码和更详细的解释我贴在下面了

//使用uni.authorize唤起授权弹窗,获取前后台位置授权需要选择'scope.userLocationBackground'别选错了哈
uni.authorize({
    scope: 'scope.userLocationBackground',
    success() {
        console.log('授权成功,准备开始使用后台位置api获取位置')

	},
	fail(res) {
		console.log('授权失败',res)
    }
})

1.3 开始使用前后台位置api(uni.startLocationUpdateBackground)

授权成功后我们就可以使用前后台位置api啦,这一步超简单,只需要调用uni.startLocationUpdateBackground方法就可以了

uni.startLocationUpdateBackground({
    type:'wgs84',
	success: (res) => {
		console.log(res,'获取位置成功,做你想做的事吧')			  
	},
	fail: (err) => {
        console.log(err,'位置获取失败')
	},
				  
})

1.4 获取实时位置

如果只是想获取前台和后台位置,到上一个步骤就结束了,但小程序切到后台后我们想持续记录位置,一般就需要跟uni.onLocationChange方法搭配使用啦,当我们获取后台位置成功后就可以调用uni.onLocationChange方法进行位置监听,更详细的代码和解释看我贴在下面的代码:

//下面是开启位置监听的代码,注意不要重复使用,如果涉及到有重复操作的地方,需要先提前调用uni.offLocationChange或uni.stopLocationUpdate方法移除或取消位置监听后再调用下面的代码
uni.onLocationChange((res) => {
//事实更新的位置可以在这里获取到
console.log(res,'不断拿到的新位置')
console.log('纬度:' + res.latitude);
console.log('经度:' + res.longitude);
})

最后提示,以上是基础的流程代码,任何业务需求都可以在这的基础上进行扩展哦!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值