更新记录
1.0.0(2023-06-25)
新版首发
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 14.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:支持 | 适用版本区间:11 - 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原生插件配置”->”云端插件“列表中删除该插件重新选择
KJ-AMapNavi
高德导航最新版、路线规划、自定义导航界面、导航路径信息、兼容uniapp自带高德地图和定位
注意
1.配置appkey
ios:manifest.json->App模块配置->定位->高德地图,配置ios的key,不要在这里勾andorid的
andorid:在插件模块里直接配置
2. ios 后台定位 需要配置 manifest.json->App常用其它设置->后台运行能力 填入“audio,location” 然后云打包
3. 兼容uniapp自带高德地图和定位
使用
<template>
<view class="content">
<button type="primary" @click="updatePrivacyShow()">设置包含隐私政策</button>
<button type="primary" @click="updatePrivacyAgree()">设置是否同意用户授权政策</button>
<button type="primary" @click="showRoute()">开始导航</button>
<button type="primary" @click="navigateTo('zidingyi')">跳转路线规划+自定义导航</button>
<button type="primary" @click="navigateTo('map')">跳转官方map组件</button>
</view>
</template>
<script>
const KJAMapNavi = uni.requireNativePlugin('KJ-AMapNavi');
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
uni.getLocation({
type: 'gcj02',
success: (res) => {
console.log('当前位置的经度:' + res.longitude);
console.log('当前位置的纬度:' + res.latitude);
},
fail: (res) => {
console.log('fail:' + JSON.stringify(res));
}
});
this.updatePrivacyShow();
this.updatePrivacyAgree();
},
methods: {
updatePrivacyShow() {
var dic = {
"isContains": true,
"isShow": true,
}
KJAMapNavi.updatePrivacyShow(dic);
},
updatePrivacyAgree() {
var dic = {
"isAgree": true
}
KJAMapNavi.updatePrivacyAgree(dic);
},
showRoute() {
var dic = {
// "start": { //起点 不传,以实时位置
// "latitude": 29.61751708984375,
// "longitude": 106.5043967013889,
// //"name": "渝北区黄山大道中段6号"
// //poiId:null
// },
"ways": [{ //途径点
"latitude": 29.68751708984375,
"longitude": 106.5243967013889,
//"name": "渝北区"
//poiId:null
}],
"end": { //终点
"latitude": 29.72097552154459,
"longitude": 106.62744411176179,
//"name": "渝北区渝航路一巷31号",
//poiId:null
},
"pageType": 0, //页面类型,0:进入路线页面, 1:进入导航页面
//"broadcastMode":3,//设置播报模式 1-简洁播报 2-详细播报 3-静音模式
//"carDirectionMode":1, //设置导航视角,1-正北向上 2-车头向上
// "carInfo": { //设置车辆信息,进行尾号限行与货车导航
// "carNumber": "京N66Y66", //车牌号
// "carType": "0", //设置车辆类型 0-燃油客车,1-燃油货车,2-纯电动客车,3-纯电动货车,4-插电式混动汽车,5-插电式混动货车,11-摩托车
// "motorcycleCC": 7, //设置摩托车排量(cc)
// "restriction": true, //设置是否躲避车辆限行。
// "vehicleAxis": "2", //设置货车的轴数,carType = 1时候生效,取值[0-255],默认为2
// "vehicleHeight": "3.56", //设置货车的高度,单位:米,carType = 1时候生效,取值[0-25.5] 如:1.8,1.5等等。
// "vehicleLength": "6", //设置货车的最大长度,单位:米,carType = 1时候生效,取值[0-25] 如:1.8,1.5等等,默认6米
// "vehicleLoad": "25.99", //设置货车的总重,即车重+核定载重,单位:吨,carType = 1时候生效,取值[0-6553.5]
// "vehicleLoadSwitch": false, //设置货车重量是否参与算路
// "vehicleSize": "2", //设置货车的大小,1-微型货车 2-轻型/小型货车 3-中型货车 4-重型货车 默认为2
// "vehicleWeight": "20", //设置货车的核定载重,单位:吨,carType = 1时候生效,取值[0-6553.5]
// "vehicleWidth": "2.5" //设置货车的最大宽度,单位:米,carType = 1时候生效,取值[0-25.5] 如:1.8,1.5等等。默认2.5米
// },
//"dayAndNightMode":0, //设置导航页面昼夜模式,0-自动切换 1-白天 2-夜间
//"multipleRouteNaviMode":true, //设置是否多路线导航模式,true:多路线导航模式, false:单路线导航模式 默认为true
//"routeStrategy":10, //设置组件规划路线的策略,默认为速度优先+躲避拥堵+距离较短,参考https://a.amap.com/lbs/static/unzip/Android_Navi_Doc/com/amap/api/navi/enums/PathPlanningStrategy.html
//"scaleAutoChangeEnable":true, //设置比例尺智能缩放是否开启
//"showCrossImage":true, //设置驾车导航时是否显示路口放大图
"showExitNaviDialog": true, //设置退出导航组件是否显示退出弹框
//"showRouteStrategyPreferenceView":false, //表示设置路径规划偏好策略页面是否显示
"theme": 0, //组件主题 范围0-2分别表示蓝色,白色, 黑色
//"trafficEnabled":false, //导航组件路况开关是否打开, 默认为false
"isUseInternalTTS": true, //是否使用内部语音播报 注意:6.1.0版本开始,默认值改为true
/**以下参数 对ios无效**/
"needDestroyDriveManagerInstanceWhenNaviExit": true, //退出导航组件是否销毁导航实例,true-退出导航页时停止导航,退出组件时销毁导航 false-退出组件不会销毁导航;当使用组件直接导航时,退出导航页也不会停止导航
//"naviMode":1, //1-实时导航 2-模拟导航
//"needCalculateRouteWhenPresent":true,//启动组件进行直接导航时,设置是否进行算路,true : 算路,false : 启动组件以后不会算路直接开启导航。默认为true。
//"secondActionVisible":false, //设置组件导航页是否显示下下个路口引导,默认不显示,注意:该接口仅驾车模式有效
//"showVoiceSetings":false, //是否展示导航语音播报设置项
/**以下参数 对andorid无效**/
//"showEagleMap": true,//设置导航组件导航页面驾车模式下是否显示鹰眼地图,显示鹰眼小地图的时候:光柱图和全览按钮隐藏 注意:摩托车模式下设置不生效
}
KJAMapNavi.showRoute(dic, (res) => {
console.log("showRoute:" + JSON.stringify(res));
});
},
navigateTo(url) {
uni.navigateTo({
url: url
})
}
}
}
</script>
路线规划+自定义导航
<template>
<view>
<KJ-AMapNavi ref="amapNaviView" style="width: 100%;height: 400px;" @onViewCreated="onViewCreated"
@onNaviViewListener="onNaviViewListener">
</KJ-AMapNavi>
<text class="title">----驾车----</text>
<view class="btns">
<button class="btn" type="primary" @click="init('drive')"><text class="btn-text">初始化驾车界面</text></button>
<button type="primary" @click="calculateRoute('drive')"><text class="btn-text">驾车规划</text></button>
<button type="primary" @click="startNavi('drive',1)"><text class="btn-text">开始导航(实时)</text></button>
<button type="primary" @click="startNavi('drive',2)"><text class="btn-text">开始导航(模拟)</text></button>
<button type="primary" @click="pauseNavi('drive')"><text class="btn-text">暂停导航</text></button>
<button type="primary" @click="resumeNavi('drive')"><text class="btn-text">恢复导航</text></button>
<button type="primary" @click="stopNavi('drive')"><text class="btn-text">停止导航</text></button>
<button type="primary" @click="getNaviPath('drive')"><text class="btn-text">获取导航路径信息</text></button>
<button type="primary" @click="getNaviPaths('drive')"><text class="btn-text">获取多个导航路径信息</text></button>
</view>
<text class="title">----步行----</text>
<view class="btns">
<button type="primary" @click="init('walk')"><text class="btn-text">初始化步行界面</text></button>
<button type="primary" @click="calculateRoute('walk')"><text class="btn-text">步行规划</text></button>
<button type="primary" @click="startNavi('walk',1)"><text class="btn-text">开始导航(实时)</text></button>
<button type="primary" @click="startNavi('walk',2)"><text class="btn-text">开始导航(模拟)</text></button>
<button type="primary" @click="pauseNavi('walk')"><text class="btn-text">暂停导航</text></button>
<button type="primary" @click="resumeNavi('walk')"><text class="btn-text">恢复导航</text></button>
<button type="primary" @click="stopNavi('walk')"><text class="btn-text">停止导航</text></button>
<button type="primary" @click="getNaviPath('walk')"><text class="btn-text">获取导航路径信息</text></button>
<button type="primary" @click="getNaviPaths('walk')"><text class="btn-text">获取多个导航路径信息</text></button>
</view>
<text class="title">----骑行----</text>
<view class="btns">
<button type="primary" @click="init('ride')"><text class="btn-text">初始化骑行界面</text></button>
<button type="primary" @click="calculateRoute('ride')"><text class="btn-text">骑行规划</text></button>
<button type="primary" @click="startNavi('ride',1)"><text class="btn-text">开始导航(实时)</text></button>
<button type="primary" @click="startNavi('ride',2)"><text class="btn-text">开始导航(模拟)</text></button>
<button type="primary" @click="pauseNavi('ride')"><text class="btn-text">暂停导航</text></button>
<button type="primary" @click="resumeNavi('ride')"><text class="btn-text">恢复导航</text></button>
<button type="primary" @click="stopNavi('ride')"><text class="btn-text">停止导航</text></button>
<button type="primary" @click="getNaviPath('ride')"><text class="btn-text">获取导航路径信息</text></button>
<button type="primary" @click="getNaviPaths('ride')"><text class="btn-text">获取多个导航路径信息</text></button>
</view>
</view>
</template>
<script>
const KJAMapNaviManager = uni.requireNativePlugin('KJ-AMapNaviManager');
export default {
data() {
return {
}
},
onReady() {
this.init('drive');
this.calculateRoute('drive');
},
methods: {
init(type) {
var dic = {
"type": type,
/**ios 以下参数有效**/
// "showUIElements": true, //是否显示界面元素
// "showBrowseRouteButton": true, //是否显示全览按钮
"showMoreButton": false, //是否显示设置按钮
// "showScale": true, //当前地图是否显示比例尺,默认NO. 注意:只有showUIElements为NO时,设置此值才有效.
// "showCompass": true, //是否显示指南针,默认NO
// "showTurnArrow": true, //路线上是否显示转向箭头,默认YES
// "showGreyAfterPass": true, //走过的路线是否置灰,默认为NO. since 6.2.0
// "mapViewModeType": 1, //0-白天 1-黑夜 2-自动 3-自定义
// "customMapStyleOptions": { //自定义地图样式设置
// "styleDataPath": "", //自定义样式二进制
// "styleDataOverseaPath": "", //海外自定义样式文件路径
// "styleId": "", //设置地图自定义样式对应的styleID,从官网获取
// "styleTextureDataPath": "", //设置自定义纹理文件二进制
// "styleExtraDataPath": "" //样式额外的配置,比如路况,背景颜色等 since 6.7.0
// },
/**ios type为drive,以下参数有效**/
// "showCrossImage": true, //是否显示路口放大图
// "showTrafficButton": true, //是否显示实时交通按钮
// "showTrafficBar": true, //是否显示路况光柱
// "autoSwitchShowModeToCarPositionLocked": false, //当显示模式为非锁车模式时,是否在7秒后自动设置为锁车模式
// "mapShowTraffic": true, //地图是否显示交通路况,默认YES. since 6.1.0
// "autoZoomMapLevel": true, //锁车模式下是否为了预见下一导航动作自动缩放地图,默认为NO. since 6.2.0
// "showCamera": true, //路线上是否显示摄像头,默认YES
// "turnArrowIs3D": true, //路线上转弯箭头是否为3D箭头线,默认为YES. since 6.6.0
// "showVectorline": true, //是否显示牵引线,默认YES. since 6.2.0
// "showTrafficLights": true, //是否显示红绿灯图标,默认YES. since 6.2.0
// "showCar": true, //是否显示小车图标,默认YES. since 6.2.0
// "showRoute": true, //是否显示路线,默认YES. 注意:路线上的相关信息,如摄像头(showCamera)、红绿灯(showTrafficLights)、转向箭头(showTurnArrow)、牵引线(showVectorline)、起终点等也会一同受控制,进行显示和隐藏. since 6.2.0
// "showBackupRoute": true, //多路线导航模式下是否显示备选路线, 默认YES. since 6.7.0
/**andorid 以下参数有效**/
// "carOverlayVisible": false, //设置是否隐藏自定义导航view上的车标,包括自车、罗盘、牵引线
// "naviMode": 0, //设置导航模式 0-车头向上模式 1-正北向上模式,步行和骑行导航如果打开了sensor,此模式将无效
// "showMode": 3, //设置导航页面显示模式 1-锁车态 2-全览态 3-普通态
// "trafficLightsVisible": true, //设置是否显示路线上的交通信号灯
// /**options**/
// "afterRouteAutoGray": true, //通过路线是否自动置灰
// "autoChangeZoom": true, //设置是否开启动态比例尺 (锁车态下自动进行地图缩放变化)
// "autoDisplayOverview": true, //设置是否自动全览模式,即在算路成功后自动进入全览模式
// "autoDrawRoute": true, //设置是否自动画路
// "autoLockCar": true, //设置6秒后是否自动锁车
// "compassEnabled": true, //设置指南针图标否在导航界面显示,默认显示。
// "laneInfoShow": true, //设置是否显示道路信息view
// "layoutVisible": true, //设置导航界面UI是否显示
// "lockMapDelayed": 10000, //设置锁定地图延迟毫秒数
// // "mapStyle": {
// // "type": 3, //0-自动 1-白天 2-黑夜 3-自定义
// // "customStylePath": ""
// // }
// "modeCrossDisplayShow": true, //设置是否显示路口放大图(路口模型图)
// "naviArrowVisible": true, //设置路线转向箭头隐藏和显示
// "realCrossDisplayShow": true, //设置是否显示路口放大图(实景图)
// "routeListButtonShow": true, //设置导航界面是否显示路线全览按钮
// "secondActionVisible": true, //设置是否显示下下个路口的转向引导,默认不显示 注意:该接口仅驾车模式有效
// "sensorEnable": true, //自车图标是否使用陀螺仪方向(只在骑行导航和步行导航下有效)
"settingMenuEnabled": false, //设置菜单按钮是否在导航界面显示
// "tilt": 0, //设置锁车态下地图倾角 倾角为0时地图模式是2D模式。
// "trafficBarEnabled": true, //设置路况光柱条是否显示(只适用于驾车导航,需要联网)。
// "trafficLayerEnabled": true, //设置[实时交通图层开关按钮]是否显示(只适用于驾车导航,需要联网)。
// "trafficLine": true, //设置地图上是否显示交通路况(彩虹线)拥堵-红色,畅通-绿色,缓慢-黄色,未知-蓝色。
}
this.$refs.amapNaviView.init(dic, (res) => {
console.log("init:" + JSON.stringify(res));
});
},
calculateRoute(type) {
var dic = {
"type": type,
"start": { //起点 不传,以实时位置
"latitude": 29.61751708984375,
"longitude": 106.5043967013889,
"name": "渝北区黄山大道中段6号" //andorid有效 poi名称
//poiId:null, //
//"direction":35, //andorid有效 设置poi角度,若设置了Poi角度,起点算路会参考该角度。单位:度,北零顺时针。范围:[0-360)
//"startAngle": 0,//ios有效 车头方向角度, 默认为-1, 0为正北, 顺时针方向增加.
},
"ways": [{ //途径点
"latitude": 29.68751708984375,
"longitude": 106.5243967013889,
"name": "渝北区黄山大道中段6号" //andorid有效 poi名称
//poiId:null, //
//"direction":35, //andorid有效 设置poi角度,若设置了Poi角度,起点算路会参考该角度。单位:度,北零顺时针。范围:[0-360)
//"startAngle": 0,//ios有效 车头方向角度, 默认为-1, 0为正北, 顺时针方向增加.
}],
"end": { //终点
"latitude": 29.72097552154459,
"longitude": 106.62744411176179,
"name": "渝北区黄山大道中段6号" //andorid有效 poi名称
//poiId:null, //
//"direction":35, //andorid有效 设置poi角度,若设置了Poi角度,起点算路会参考该角度。单位:度,北零顺时针。范围:[0-360)
//"startAngle": 0,//ios有效 车头方向角度, 默认为-1, 0为正北, 顺时针方向增加.
},
"strategy": 1001, //type为walk和ride有效 算路策略 1000-算路支持一条 1001-算路支持多条
"drivingStrategy": 10, //type为drive有效 路径的计算策略 参考https://a.amap.com/lbs/static/unzip/Android_Navi_Doc/com/amap/api/navi/enums/PathPlanningStrategy.html
"isUseInternalTTS": true, //是否使用内置播放器进行导航播报, 如果为YES
"multipleRouteNaviMode": true, //设置多路线导航模式(实时导航中拥有若干条备选路线供用户选择), 或单路线导航模式(默认模式). 注意: 1、设置的导航模式会在下一次主动路径规划时生效, 建议在 AMapNaviDriveManager 单例初始化时就进行设置. 2、多路线导航模式还需同时满足以下4个条件才能够生效:a.路径规划时 AMapNaviDrivingStrategy 需选用多路径策略; b.起终点的直线距离需<=80KM; c.不能有途径点; d.车辆不能是货车类型. since 6.3.0
/**ios 以下参数有效**/
"screenAlwaysBright": true, //是否在导航过程中让屏幕常亮,默认YES.
"pausesLocationUpdatesAutomatically": true, //指定定位是否会被系统自动暂停。默认为YES。
"allowsBackgroundLocationUpdates": true, //是否允许后台定位.默认为NO
}
console.log("calculateRoute_dic:" + JSON.stringify(dic));
KJAMapNaviManager.calculateRoute(dic, (res) => {
console.log("calculateRoute:" + JSON.stringify(res));
//回调处理,参考https://a.amap.com/lbs/static/unzip/Android_Navi_Doc/com/amap/api/navi/INaviInfoCallback.html
if (res.method == "onCalculateRouteSuccess") {
this.startNavi(res.type, 1);
}
})
},
startNavi(type, naviType) {
/**
* emulatorNaviSpeed-模拟导航速度
* 驾车默认速度为60km/h,设置的模拟值区间应该在10-120之间.
*步行默认速度为20km/h,设置的模拟值区间应该在10-30之间.
*骑行默认速度为35km/h,设置的模拟值区间应该在10-50之间.
* */
var dic = {
"type": type,
"naviType": naviType, //1实时导航 2模拟导航
"emulatorNaviSpeed": 10
}
KJAMapNaviManager.startNavi(dic);
},
pauseNavi(type) {
var dic = {
"type": type
}
KJAMapNaviManager.pauseNavi(dic);
},
resumeNavi(type) {
var dic = {
"type": type
}
KJAMapNaviManager.resumeNavi(dic);
},
stopNavi(type) {
var dic = {
"type": type
}
KJAMapNaviManager.stopNavi(dic);
},
getNaviPath(type) {
KJAMapNaviManager.getNaviPath({ //获取导航路径信息
"type": type
}, (naviPathRes) => {
console.log("getNaviPath:" + JSON.stringify(naviPathRes));
})
},
getNaviPaths(type) {
KJAMapNaviManager.getNaviPaths({ //获取多个导航路径信息
"type": type
}, (naviPathRes) => {
console.log("getNaviPaths:" + JSON.stringify(naviPathRes));
});
},
selectMainPathID(type) {
KJAMapNaviManager.selectMainPathID({ //多路径规划时选择路径
"type": type,
"pathID": 14
});
}
}
}
</script>
<style>
.title {
font-size: 12px;
}
.btns {
display: flex;
flex-wrap: wrap;
flex-direction: row;
align-items: center;
justify-content: start;
font-size: 12px;
}
.btn-text {
height: 30px;
line-height: 30px;
font-size: 12px;
color: white;
}
</style>