更新记录
1.1(2025-02-26)
更新插件Android端SDK到9.6.4版本,更新插件iOS端SDK到2.1.2版本。
1.0(2023-03-07)
新版发布
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 14.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 17 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
百度定位插件集成说明
集成准备
-
先申请好百度开放平台的appKey
-
可以通过manigest.json 配置appKey;也可以通过接口setAppKey来设定
-
添加本地插件 nativeplugins/BDMap-Loc-SDK 到工程对应位置,manifest.json 原生插件勾选百度定位sdk
-
权限说明
<!--用于申请调用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" />
-
根据相关到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
});
});