更新记录
1.0.3(2023-09-07)
解决插件定位问题
1.0.2(2021-04-27)
新增:定位模式传入可高精度定位模式,低功耗定位模式,以及实现gps离线定位(不需要连接网络)
1.0.1(2021-03-17)
1.停止定位增加回调信息 2.修改定时回调方式,解决重复返还定位信息
查看更多平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
## 插件解决的问题
1.解决app切换到后台之后无法定位的问题,包含有GPS定位,高德定位,获取当前位置卫星数等
2.如果想解决 当 app切换到后台、锁屏之后,系统经常会杀死app,导致app无法进行后台定位的情况,可以配合以下保活插件使用,效果更好
第二款,保活插件,黑屏增强款,黑屏不会进入睡眠,可实现持续获取定位
3.插件使用说明
1.初始化定位插件
const gpsListener = uni.requireNativePlugin('ljc-location');
2.地图隐私合规检查接口
//隐私权政策是否包含高德开平隐私权政策 true是包含
var isContains = true;//隐私权政策是否包含高德开平隐私权政策 true是包含
var isShow = true;//隐私权政策是否弹窗展示告知用户 true是展示
gpsListener.updatePrivacyShow(isContains,isShow)
//隐私权政策是否取得用户同意 true是用户同意
gpsListener.updatePrivacyAgree(true)
3.判断是否有定位权限 (flag:false/true)
gpsListener.isLocationPermissions(function(res){
console.log(res)
})
4.申请后台定位权限
gpsListener.requestLocationPermissions();
5.开启定位 返回定位监听回调(新增传入参数:定位模式)注意修改!
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.16971201671114, //经度 "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.代码示例
<template>
<view>
<view class="text-area">
<button @tap="isLocationPermissions">判断是否有定位权限</button>
<button @tap="requestLocationPermissions">申请后台定位权限</button>
<button @tap="openGPS">GPS定位权限</button>
<button @tap="startLocationListener">开启定位</button>
<button @tap="stopLocation">关闭定位</button>
<view style="margin-top: 15px;">
<view>
<label>当前经度:{{gpsObj.longitude}}</label>
</view>
<view>
<label>当前纬度:{{gpsObj.latitude}}</label>
</view>
<view>
<label>GPS状态:{{gpsObj.status}}</label>
</view>
<view>
<label>当前位置获取卫星总数:{{gpsObj.count}}</label>
</view>
</view>
</view>
</view>
</template>
<script>
const gpsListener = uni.requireNativePlugin('ljc-location');
export default {
data() {
return {
gpsObj: {
longitude: 0,
latitude: 0,
count: 0,
status: ""
}
}
},
() {
//隐私权政策是否包含高德开平隐私权政策 true是包含
var isContains = true;//隐私权政策是否包含高德开平隐私权政策 true是包含
var isShow = true;//隐私权政策是否弹窗展示告知用户 true是展示
gpsListener.updatePrivacyShow(isContains,isShow)
//隐私权政策是否取得用户同意 true是用户同意
gpsListener.updatePrivacyAgree(true)
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功能已开启');
}
}
});
}
}
}
}
}
</script>
<style>
.text-area {
display: flex;
justify-content: center;
flex-direction: column;
justify-content: center;
}
button {
margin: 5px;
}
</style>