小程序 获取当前城市位置-高德地图_Start2019-CSDN博客小程序获取位置信息,包括省市区、用户拒绝后,调起用户授权设置页,重新授权获取位置信息https://blog.csdn.net/Start2019/article/details/122542917上一篇文章是获取用户所在城市地址信息,这里是根据经纬度监听位置,大概3秒刷新一次经纬度。
需要在app.json中配置
"requiredBackgroundModes": ["location"],
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序扫描货物码时的地址展示"
}
},
具体做法:
const app = getApp();
Page({
onShow: function () {
this.wxLocation(); //检测是否授权位置信息,若授权则开始监听位置
//开启监听
const _locationChangeFn = res=> {
// console.log('location change', res.latitude, res.longitude);
app.getAddress(res.latitude, res.longitude)
}
wx.onLocationChange(_locationChangeFn);
},
//生命周期函数--监听页面隐藏
onHide: function () {
wx.offLocationChange(); //取消监听
},
//检测位置信息
wxLocation(){
wx.getSetting({
success(res){
if(res.authSetting['scope.userLocationBackground']){
wx.startLocationUpdate({
success: (res) => {
console.log('startLocationUpdate-res', res)
},
fail: (err) => {
console.log('startLocationUpdate-err', err)
}
})
} else {
if(!res.authSetting['scope.userLocation']){
//打开设置页面去授权
//扫描货物码时开始提示。否则取消后还是能继续扫描,只有返回到该页面时才提示,起不到引导用户授权效果
} else {
wx.startLocationUpdate({
success: (res) => {
console.log('startLocationUpdate-res', res)
},
fail: (err) => {
console.log('startLocationUpdate-err', err)
}
})
}
} //判断authSetting['scope.userLocationBackground']结束
}
});
},
//点击货物码
click: function(){
wx.getSetting({
success(res){
if(!res.authSetting['scope.userLocation']){
app.utils.showModal('检测到您没打开此小程序的定位权限,是否去设置打开?', '提示').then(()=>{
wx.openSetting({
success: function(e){
console.log("打开授权页面",e);
app.getUserLocation(); //获取地址
},
})
})
} else {
//已授权要做的操作
}
}
});
}
})
app.getAddress(res.latitude, res.longitude) 是我封装在 app.js 中的函数,具体使用过程可以在上个博客中去看一下。
const amapFile = require('./libs/amap-wx.130');
App({
//获取用户经纬度 latitude纬度, longitude经度
getUserLocation(){
var that = this;
wx.getLocation({
success: function(res){
console.log("经纬度",res);
// that.setData({"userInfo.latitude": res.latitude, "userInfo.longitude": res.longitude});
that.getAddress(res.latitude,res.longitude)
}
})
},
//转换成省市区 latitude纬度,long经度
getAddress(latitude, longitude){
// latitude="22.26",longitude = "112.57";
var that = this;
var myAmapFun = new amapFile.AMapWX({ key: that.addressKey });
myAmapFun.getRegeo({
location: '' + longitude + ',' + latitude + '',//location的格式为'经度,纬度'
success: function (data) {
let {province,city,district} = data[0].regeocodeData.addressComponent;
city = (city || city.length>0) ? city:"";
console.log("省市区", province,city,district)
},
fail: function (info) { }
})
},
})