更新记录

1.0.2(2021-04-27)

新增:定位模式传入可高精度定位模式,低功耗定位模式,以及实现gps离线定位(不需要连接网络)

1.0.1(2021-03-17)

1.停止定位增加回调信息 2.修改定时回调方式,解决重复返还定位信息

查看更多

平台兼容性

Android iOS
适用版本区间:4.4 - 11.0 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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.判断是否有定位权限 (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.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: ""
                }

            }
        },
        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功能已开启');
                                }
                            }
                        });
                    }
                }
            }
        }
    }
</script>

<style>
    .text-area {
        display: flex;
        justify-content: center;
        flex-direction: column;
        justify-content: center;
    }

    button {
        margin: 5px;
    }
</style>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<!--用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!--用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!--用于获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!--用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!--用于访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <!--用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!--用于写入缓存数据到扩展存储卡--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!--用于申请调用A-GPS模块--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

https://lbs.amap.com 使用高德后台定位

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问