更新记录

1.0(2023-03-07)

新版发布


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 14.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:9 - 17

原生插件通用使用流程:

  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. 先申请好百度开放平台的appKey

  2. 可以通过manigest.json 配置appKey;也可以通过接口setAppKey来设定

  3. 添加本地插件 nativeplugins/BDMap-Loc-SDK 到工程对应位置,manifest.json 原生插件勾选百度定位sdk

  4. 权限说明

    <!--用于申请调用A-GPS模块-->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />
    <!-- 访问网络,网络定位需要上网-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--这个权限用于允许程序在手机屏幕关闭后后台进程仍然运行-->
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <!--前台服务-->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <!--忽略电池优化-->
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
    <!-- Android 10 必须加后台定位权限,否则不会出现始终允许-->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
  5. 根据相关到app包名/签名 制作自定义调试基座 自定义基座

插件调用对象

var bdLocationApi = uni.requireNativePlugin("Baidu-Loc");

插件接口

注意,接口1是插件有效调用的前提,必需先调用;其次是定位权限必需申请成功;接着调用定位相关接口。 第7及之后接口为特殊后台定位保活需求调用,请根据使用场景来选择是否调用。

1 隐私合规 setAgreePrivacy(agree)

调用任何接口之前必需先进行隐私合规对同意许可,否则后续调用无效

//这里需要弹框让用户确认,确认后调用setAgreePrivacy
bdLocationApi.setAgreePrivacy(agree);

2 定位权限检查并申请 checkLocationPermission(callback)

bdLocationApi.checkLocationPermission(function(res){
                    uni.showToast({
                        title:res.result,
                        duration:3000
                    });
                });

3 设置定位参数属性 setLocOption(json)

定位前准备,根据需要设定需要的属性,请详细阅读了解每个属性的作用

bdLocationApi.setLocOption({
                    locationMode:2,           //定位模式 0 低功耗 1 设备定位 2 高精度 可选,默认高精度
                    coorType:"gcj02",         //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
                    scanSpan:1000,            //可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
                    openGps:true,             //可选,默认false,设置是否开启卫星定位
                    openGnss:false,           //设置是否打开gnss进行定位
                    locationNotify:false,     //可选,默认false,定位数据有变化才会回调,true的情况下收到gps会一秒回调一次,无论配置的scanspan是多少
                    ignoreKillProcess:false,  //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
                    ignoreCacheException:true,//可选,默认false,设置是否收集CRASH信息,默认收集
                    wifiCacheTimeOut:"3000",  //设置wifi缓存超时时间阈值,超过该阈值,首次定位将会主动扫描wifi以使得定位精准度提高,定位速度会有所下降,具体延时取决于wifi扫描时间,大约是1-3秒
                    enableSimulateGps:false,  //设置是否允许模拟gps true:允许; false:不允许,默认为false
                    needNewVersionRgc:false,  //是否需要最新版本的地址信息 true:需要 ; false:不需要
                    isNeedAddress:false,      //可选,设置是否需要地址信息,默认不需要
                    isNeedLocationDescribe:false,//可选,默认false,设置是否需要位置语义化结果,结果类似于“在北京天安门附近”
                    isNeedLocationPoiList:false, //可选,默认false,设置是否需要POI结果
                    isNeedDeviceDirect:false ,//可选,设置是否需要设备方向结果
                    isNeedAltitude:false,     //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
                    isEnableBeidouMode:false, //设置是否只开启北斗卫星定位功能,该功能只在部分软硬件符合要求的手机上起作用;开放平台公开版本不起作用
                    prodName:"test",          //可选,设置Prod字段值
                    firstLocType:1,           //设置首次定位类型。默认为速度优先 1速度优先,2 准确性优先
                    locationPurpose:1,        //设置定位场景,0 签到场景,1 运动场景,其他值 出行场景
                                               //签到场景 只进行一次定位返回最接近真实位置的定位结果(定位速度可能会延迟1-3s)
                                               //出行场景 高精度连续定位,适用于有户内外切换的场景,卫星定位和网络定位相互切换,卫星定位成功之后网络定位不再返回,卫星信号断开之后一段时间才会返回网络结果
                                               //运动场景 高精度连续定位,适用于有户内外切换的场景,卫星定位和网络定位相互切换,卫星定位成功之后网络定位不再返回,卫星信号断开之后一段时间才会返回网络结果

                    //可选 开启打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
                    openAutoNotifyMode:{
                        minTimeInterval:1000,     //最短定位时间间隔,单位毫秒,最小值0
                        minDistance:5,            //最短定位距离间隔,单位米,最小值0,
                        locSensitivity:2          //定位变化敏感程度  3 低 ,2 中 ,1 高
                    }
                });

设置回调监听 setLocationCallback(callback)

bdLocationApi.setLocationCallback(function(res){
                    if (res.type == "onReceiveLocation"){//res.data 定位数据
                        uni.showToast({
                            title:"onReceiveLocation",
                            duration:3000
                        });
                    } else if(res.type == "onConnectHotSpotMessage"){
                        uni.showToast({
                            title:"onConnectHotSpotMessage",
                            contentText:"hotSpotState"+ res.hotSpotState,
                            duration:3000
                        });
                    }
                    console.log(res);
                });

响应res.data 请参考官方定义BDLocation类

4 开始定位 startLocation()

bdLocationApi.startLocation();

响应res.data请参考官方定义BDLocation类

5 停止定位

bdLocationApi.stopLocation();

6 一次定位 startOnceLocation(callback)

关于一次定位,开发者可以根据持续定位的接口 startLocation 来实现,并配置好相关参数,选择首次定位的模式(准确度和速度) 来达成合适的调用。

bdLocationApi.startOnceLocation(function(res){
                    console.log(res);
                    uni.showToast({
                        title:JSON.stringify(res),
                        duration:3000
                    });
                });

响应res请参考官方定义BDLocation类

7 开启后台定位 enableLocInForeground(json)

这里的后台是指我们开发到app不在前台运行的场景,此时如果还要继续定位,需要开启后台定位 以保证继续定位。同时通知栏会提醒正在后台定位。

bdLocationApi.enableLocInForeground({
                    enableLights:true,              //是否在桌面icon右上角展示小圆点
                    lightColor:"#0000FF",           //小圆点颜色
                    showBadge:true,                 //是否在久按桌面图标时显示此渠道的通知
                    //前面三个属性不定会产生实际效果
                    smallIconPath:"",               //通知栏图标
                    contentTitle:"测试标题",         //通知栏标题
                    contentText:"通知内容-正在后台运行"//通知栏内容
                });

8 停用后台定位 disableLocInForeground(removeNotification)

//removeNotification 同时移除通知栏
bdLocationApi.disableLocInForeground(true);

9 是否已经忽略电池优化isIgnoringBatteryOptimizations()

var isIgnore = bdLocationApi.isIgnoringBatteryOptimizations();

10 检查并开启忽略电池优化 checkIgnoringBatteryOptimizations(callback)

bdLocationApi.checkIgnoringBatteryOptimizations(function(res){
                    uni.showToast({
                        title: res,
                        duration:3000
                    });
                });

11 持续定位权限是否已开 grantedAlwaysLocation();

var granted = grantedAlwaysLocation();

12 检查并开启持续定位权限 checkAlwaysLocationPermission(callback)

bdLocationApi.checkAlwaysLocationPermission(function(res){
                    uni.showToast({
                        title:res.result,
                        duration:3000
                    });
                });

13 通知栏功能是否可用areNotificationsEnabled()

var enable = bdLocationApi.areNotificationsEnabled()

14 检查并开启通知栏权限 checkNotificationsEnabled(callback)

bdLocationApi.checkNotificationsEnabled(function(rest){
    uni.showToast({
        title:res+"",
        duration:3000
    });
});

百度官方android常见问题 百度官方ios常见问题

隐私、权限声明

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

定位权限

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

插件自身不采集任何数据,插件使用的高德地图 SDK采集数据请参考其官方说明:https://lbsyun.baidu.com

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

暂无用户评论。

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