定位2.小程序一个按钮获取定位授权以及设置,封装调用

tech2022-08-24  129

详见:码云小程序demo1 1.wxml: <button bindtap="getAddress3">获取定位</button> 2.js import Router from '../../utils/index' import { getLocationWithSetting } from '../../utils/location' Router({ async getAddress3() {//异步 执行函数getLocationWithSetting let res = await getLocationWithSetting() console.log(res); }, } 3.封装的utils/location getLocationWithSetting import { $msg } from './index' /** * 获取经纬度 */ export async function getLocationWithSetting() { //先查看是否有定位权限 let res = await getSetting('scope.userLocation') //如果有权限,或者第一次请求此权限,则正常获取位置 if (res || res === undefined) { return await getLocation() } else { //如果之前请求权限被拒绝过,则打开设置页 let res1 = await openSetting('scope.userLocation') //根据设置页的结果,再次获取定位 if (res1) { return await getLocation() } else $msg("为了不影响您的使用,请授权定位") } } /** * 获取目前请求过的权限 * @param {*} permission */ export function getSetting(permission) { return new Promise((resolve) => { //使用Promise,成功返回resolve wx.getSetting({ //获取用户当前设置,将定位权限的结果返回 success: (res) => { resolve(res.authSetting[permission])//permission='scope.userLocation' } }) }) } /** * 打开设置页 * @param {*} permission */ export function openSetting(permission) { return new Promise((resolve) => { wx.openSetting({//弹出设置页 成功返回true/false success: (res) => { resolve(res.authSetting[permission])//permission='scope.userLocation' } }) }) } function getLocation() { return new Promise((resolve) => { //使用Promise,成功返回resolve wx.getLocation({ //使用getLocation,询问授权 success({ //成功返回解构的lng,lat longitude: lng, latitude: lat }) { resolve({ lng, lat }); }, fail: () => $msg("为了不影响您的使用,请授权定位") //失败提示 }) }) }
最新回复(0)