更新记录
1.0.2(-04-27)
新增:定位模式传入可高精度定位模式,低功耗定位模式,以及实现gps离线定位(不需要连接网络)
1.0.1(-03-17)
1.停止定位增加回调信息 2.修改定时回调方式,解决重复返还定位信息
查看更多
平台兼容性
Android
iOS
适用版本区间:4.4 - 11.0
×
原生插件通用使用流程:
购买插件,选择该插件绑定的项目。
在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
开发完毕后正式云打包
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
## 插件解决的问题
1.解决app切换到后台之后无法定位的问题,包含有GPS定位,高德定位,获取当前位置卫星数等
2.如果想解决 当 app切换到后台、锁屏之后,系统经常会杀死app,导致app无法进行后台定位的情况,可以配合以下保活插件使用,效果更好
3.插件使用说明
1.初始化定位插件
const gpsListener = uni.requireNativePlugin('ljc-location');
2.判断是否有定位权限 (flag:false/true)
gpsListener.isLocationPermissions(function(res){
console.log(res)
})
3.申请后台定位权限
gpsListener.requestLocationPermissions();
4.开启定位 返回定位监听回调(新增传入参数:定位模式)注意修改!
0 高精度定位模式:会同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息。
1低功耗定位模式:不会使用GPS和其他传感器,只会使用网络定位(Wi-Fi和基站定位);
2 仅用设备定位模式:不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位,需要在室外环境下才可以成功定位。注意,自 v2.9.0 版本之后,仅设备定位模式下支持返回地址描述信息。
/*
-参数说明-
参数1 : 定位时间间隔 设置两秒返回一次 参数单位秒
参数2:定位模式
0代表高精度定位模式 1代表低功耗定位模式 2代表仅用设备定位模式
*/
gpsListener.initLocationListener(2,0);
//开始定位 定位监听回调
gpsListener.startLocationListener(res=>{
console.log(res)
});
res 返回数据格式解析说明
详细说明可以查看官方文档:高德类 AMapLocation说明
{
//gps相关报告
"gpsResult": {
"gPSStatusString": "GPS状态正常", //gps状态
"gPSSatellites": 8 //当前位置GPS搜星数
},
"result": {
"verticalAccuracyMeters": 19.747879028320312,
"gpsAccuracyStatus": 1, //精度
"time": 1607069383000, //定位时间
"fromMockProvider": false,
"elapsedRealtimeUncertaintyNanos": 0,
"district": "某某区",
"bearing": 0,
"address": "某省某市某区工五路5号靠近某小区", //详细地址
"speedAccuracyMetersPerSecond": 1.2578155994415283,
"conScenario": 0,
"poiName": "某小区", //兴趣点
"satellites": 8, // 获取当前提供定位服务的卫星个数
"longitude": 100.1697171114, //经度
"street": "工五路", //街道
"provider": "gps", //提供者
"altitude": 176.49,
"road": "工五路", //路
"coordType": "GCJ02",
"locationDetail": "",
"buildingId": "",
"speed": 0,
"bearingAccuracyDegrees": 0,
"city": "某1市", //市
"province": "某省", //省
"trustedLevel": 1,
"fixLastLocation": false,
"offset": true,
"errorInfo": "success",
"adCode": "411503",
"streetNum": "14号",
"description": "在某小区附近", //地址 详情
"errorCode": 0,
"cityCode": "0376", //城市编码
"locationType": 1,
"latitude": 38.142724026669306, //纬度
"mock": false,
"elapsedRealtimeNanos": 775234330752552,
"accuracy": 18.337085723876953, //精度
"complete": true,
"country": "中国", //国家
"floor": ""
}
}
6.关闭定位
gpsListener.stopLocationListener(res=>{
console.log(res);
})
7.代码示例
判断是否有定位权限
申请后台定位权限
GPS定位权限
开启定位
关闭定位
当前经度:{{gpsObj.longitude}}
当前纬度:{{gpsObj.latitude}}
GPS状态:{{gpsObj.status}}
当前位置获取卫星总数:{{gpsObj.count}}
const gpsListener = uni.requireNativePlugin('ljc-location');
export default {
data() {
return {
gpsObj: {
longitude: 0,
latitude: 0,
count: 0,
status: ""
}
}
},
onLoad() {
uni.getLocation({
success(res) {
console.log(res)
}
})
},
methods: {
isLocationPermissions() {
gpsListener.isLocationPermissions(function(res) {
console.log(res)
})
},
requestLocationPermissions() {
gpsListener.requestLocationPermissions();
},
initLocationListener() {
//单位秒
gpsListener.initLocationListener(2);
},
startLocationListener() {
let that = this;
/*
-参数说明-
参数1 : 定位时间间隔 设置两秒返回一次 参数单位秒
参数2:定位模式 详细说明看插件文档
0代表高精度定位模式 1代表低功耗定位模式 2代表仅用设备定位模式
*/
gpsListener.initLocationListener(2,0);
//开始定位 定位监听回调
gpsListener.startLocationListener(res => {
console.log(res)
that.gpsObj.latitude = res.result.latitude
that.gpsObj.longitude = res.result.longitude
that.gpsObj.status = res.gpsResult.gPSStatusString
that.gpsObj.count = res.gpsResult.gPSSatellites
});
},
stopLocation() {
gpsListener.stopLocationListener(res => {
console.log(res);
})
},
//检测是否开启定位
openGPS() {
let system = uni.getSystemInfoSync(); // 获取系统信息
if (system.platform === 'android') { // 判断平台
var context = plus.android.importClass("android.content.Context");
var locationManager = plus.android.importClass("android.location.LocationManager");
var main = plus.android.runtimeMainActivity();
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
uni.showModal({
title: '提示',
content: '请打开定位服务功能',
showCancel: false, // 不显示取消按钮
success() {
if (!mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER)) {
var Intent = plus.android.importClass('android.content.Intent');
var Settings = plus.android.importClass('android.provider.Settings');
var intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
main.startActivity(intent); // 打开系统设置GPS服务页面
} else {
console.log('GPS功能已开启');
}
}
});
}
}
}
}
}
.text-area {
display: flex;
justify-content: center;
flex-direction: column;
justify-content: center;
}
button {
margin: 5px;
}