先创建个getLocation.js文件
//获取用户当前所在的位置
const getLocation = () => {
return new Promise((resolve, reject) => {
let _locationChangeFn = (res) => {
resolve(res) // 回传地里位置信息
wx.offLocationChange(_locationChangeFn) // 关闭实时定位
wx.stopLocationUpdate(_locationChangeFn); // 关闭监听 不关闭监听的话,有时获取位置时会非常慢
}
wx.startLocationUpdate({
success: (res) => {
wx.onLocationChange(_locationChangeFn)
},
fail: (err) => {
// 重新获取位置权限
wx.openSetting({
success(res) {
res.authSetting = {
"scope.userLocation": true
}
}
})
reject(err)
}
})
})
}
module.exports = {
getLocation
}
在App.vue文件里引入封装的getLocation.js文件
<script>
import getLocation from "./pages/common/getLocation.js";
import { addUserTrail } from "@/api/promote.js";
var QQMapWX = require("./common/qqmap-wx-jssdk.js");//引入腾讯地图逆解析地址
var qqmapsdk;
export default {
data() {
return {
latitude:'',
longitude:''
};
},
onLaunch: function () {
setInterval(function () {//定时任务判断登录的角色在调用getLocation.js
if (uni.getStorageSync("ROLE_NAME") !== null &&
uni.getStorageSync("ROLE_NAME") !== "" &&
uni.getStorageSync("ROLE_NAME") === "BD") {
getLocation.getLocation().then((res) => {
console.log('当前所在位置的经纬度为:')
console.log(res.latitude,res.longitude)
const addUserTrailBody = {
latitude: null,
longitude: null,
address: "",
};
addUserTrailBody.latitude = res.latitude;
addUserTrailBody.longitude = res.longitude;
addUserTrail(addUserTrailBody);
});
}
}, 90000);
},
methods: {
getMapAddress() {
const that = this;
const tMap = new QQMapWX({
key: "xxx", //腾讯地图开发者密钥key
});
uni.getLocation({
type: "wgs84",
isHighAccuracy: true,
success: (res) => {
console.log(res);
},
fail: () => {
console.log("获取经纬度失败");
},
complete: () => {
tMap.reverseGeocoder({//逆解析
location: {
latitude: that.latitude,
longitude: that.longitude,
},
success: function (res) {
console.log("解析地址成功", res);
console.log("当前地址:", res.result.address);
const addUserTrailBody = {//拿到地理位置传递下
latitude: null,
longitude: null,
address: "",
};
addUserTrailBody.latitude = res.latitude;
addUserTrailBody.longitude = res.longitude;
addUserTrailBody.address = res.address;
addUserTrail(addUserTrailBody);
uni.setStorage({
key: "local",
data: res.result.address,
success() {
console.log("用户地址信息已缓存");
},
});
},
fail: function (res) {
uni.showToast({
title: "定位失败",
duration: 2000,
icon: "none",
});
console.log(res);
},
complete: function (res) {
//无论成功失败都会执行
console.log("获取定位信息");
return;
uni.openLocation({
latitude: that.latitude,
longitude: that.longitude,
success: function () {
console.log("success");
},
});
},
});
},
});
},
},
};
</script>
要在manifest.json文件里配置下内容
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于定位效果展示"
}
},
"requiredPrivateInfos": [
"getLocation",
"onLocationChange",
"startLocationUpdate",
"chooseLocation"
],
"requiredBackgroundModes": [
"location"
]