必要配置
首先要确保manifest.json文件中配置相关权限
{ // 小程序配置 "mp-weixin" :{ // 这里不设置,息屏后会获取不到位置信息 "requiredBackgroundModes": [ "location" ], "requiredPrivateInfos" : [ "getLocation", "onLocationChange", "startLocationUpdateBackground", "startLocationUpdate" ], "permission" : { "scope.userLocationBackground" : { "desc" : "用于获取周边点位和记录低碳足迹,请选择“使用时和离开后”" }, "scope.userLocation" : { "desc" : "用于获取周边点位和记录低碳足迹,请选择“使用时和离开后”" } }, } }
具体使用
uni.authorize({ scope: 'scope.userLocationBackground', success() { // 当前位置信息 const startLocationFun = function (){ uni.onLocationChange(function (res){ console.log(res) }) } // 启动背景持续获取定位 uni.startLocationUpdateBackground({ success:startLocationFun, fail:function (err){ // 启动失败,就启动前台授权 // 小程序bug,首次授权拒绝后,以后进入就再也没有重新授权 startLocationUpdateBackground 的地方了 uni.startLocationUpdate({ success:startLocationFun }) } }) }, fail:function (err){ // 拒绝后让手动去授权 } });
授权上可以搭配uni.getSetting和uni.openSetting使用
uni.getSetting({ success:function (res){ if(res.errMsg === 'getSetting:ok'){ // 已授权 if(!res.authSetting['scope.userLocation']){ }else{ // 未授权 } } } })
注意uni.openSetting需要用户点击才能触发。