鸿蒙原生应用如何使用高德地图导航功能

手机APP/开发
313
0
0
2024-03-17

经过坚果派内部的测试,最后发现,其实这个问题还是有解决的办法的。不信,你继续往后读。

一、创建项目

image-20240102142924183

i

二、Want学习

Want的定义与用途

Want是一种对象,用于在应用组件之间传递信息。

其中,一种常见的使用场景是作为startAbility()方法的参数。例如,当UIAbilityA需要启动UIAbilityB并向UIAbilityB传递一些数据时,可以使用Want作为一个载体,将数据传递给UIAbilityB。

Want用法示意

Want的类型

显式Want:在启动目标应用组件时,调用方传入的want参数中指定了abilityName和bundleName,称为显式Want。

显式Want通常用于在当前应用中启动已知的目标应用组件,通过提供目标应用组件所在应用的Bundle名称信息(bundleName)并在Want对象内指定abilityName来启动目标应用组件。当有明确处理请求的对象时,显式Want是一种简单有效的启动目标应用组件的方式。

import Want from '@ohos.app.ability.Want';

let wantInfo: Want = {
  deviceId: '', // deviceId为空表示本设备
  bundleName: 'com.nut.17752170152',
  abilityName: 'FuncAbility',
}

隐式Want:在启动目标应用组件时,调用方传入的want参数中未指定abilityName,称为隐式Want。

当需要处理的对象不明确时,可以使用隐式Want,在当前应用中使用其他应用提供的某个能力,而不关心提供该能力的具体应用。隐式Want使用skills标签来定义需要使用的能力,并由系统匹配声明支持该请求的所有应用来处理请求。例如,需要打开一个链接的请求,系统将匹配所有声明支持该请求的应用,然后让用户选择使用哪个应用打开链接。

import Want from '@ohos.app.ability.Want';

let wantInfo: Want = {
  // uncomment line below if wish to implicitly query only in the specific bundle.
  // bundleName: 'com.example.myapplication',
  action: 'ohos.want.action.search',
  // entities can be omitted
  entities: [ 'entity.system.browsable' ],
  uri: 'https://www.test.com:8080/query/student',
  type: 'text/plain',
};

三、导航

用法

cat=android.intent.category.DEFAULT
dat=androidamap://navi?sourceApplication=appname&poiname=fangheng&lat=36.547901&lon=104.258354&dev=1&style=2
pkg=com.autonavi.minimap

参数说明

参数

说明

是否必填

navi

服务类型

sourceApplication

第三方调用应用名称。如 amap

poiname

POI 名称

lat

纬度

lon

经度

dev

是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)

style

导航方式(0 速度快;1 费用少;2路程短;3 不走高速;4 躲避拥堵;5 不走高速且避免收费;6 不走高速且躲避拥堵;7;躲避收费和拥堵;8 不走高速躲避收费和拥堵)由于与用户本地设置冲突,Android平台自8.2.6版本起不支持该参数,偏好设置将以用户本地设置为准

关键代码

  let context = getContext(this) as common.UIAbilityContext
    context.startAbility({
      uri: "androidamap://navi?sourceApplication=appname&lat=" + this.latitude + "&lon=" + this.longitude + "&dev=1",
      action: "android.intent.action.VIEW"
    })

效果图

i

四、路径规划

用法

act=android.intent.action.VIEW
cat=android.intent.category.DEFAULT
dat=amapuri://route/plan/?sid=&slat=39.92848272&slon=116.39560823&sname=A&did=&dlat=39.98848272&dlon=116.47560823&dname=B&dev=0&t=0
pkg=com.autonavi.minimap

参数说明:

参数

说明

是否必填

route

服务类型

sourceApplication

第三方调用应用名称。如 amap

sid

起点的POI ID(例如天安门为B000A60DA1)

slat

起点纬度。如果不填写此参数则自动将用户当前位置设为起点纬度。

slon

起点经度。如果不填写此参数则自动将用户当前位置设为起点经度。

sname

起点名称

did

终点的POI ID (例如天安门为B000A60DA1)

dlat

终点纬度

dlon

终点经度

dname

终点名称

dev

起终点是否偏移(0:lat 和 lon 是已经加密后的,不需要国测加密; 1:需要国测加密)

m

驾车方式 =0(速度快)=1(费用少) =2(路程短)=3 不走高速 =4(躲避拥堵)=5(不走高速且避免收费) =6(不走高速且躲避拥堵) =7(躲避收费和拥堵) =8(不走高速躲避收费和拥堵)。公交 =0(速度快)=1(费用少) =2(换乘较少)=3(步行少)=4(舒适)=5(不乘地铁)由于与用户本地设置冲突,Android平台7.5.9版本起不支持该参数,偏好设置将以用户本地设置为准

t

t = 0(驾车)= 1(公交)= 2(步行)= 3(骑行)= 4(火车)= 5(长途客车) (骑行仅在V7.8.8以上版本支持)

rideType

仅当 t = 3 时该参数生效。rideType = elebike 电动车,rideType = bike/为空 自行车(电动车规划仅在V8.65.0及以上版本支持)


输入起点和终点,搜索公交、驾车或步行的线路。支持版本 V4.2.1 起

关键代码

    let context = getContext(this) as common.UIAbilityContext
    context.startAbility({
      uri: "amapuri://route/plan/?did=&dlat=36.07&dlon=103.82&dname=坚果派17752170152&dev=0&t=0",
      
      action: "android.intent.action.VIEW"
    })

效果

image-202

五、Web组件实现地图图显示

import web_webview from '@ohos.web.webview';

@Entry
@Component
struct MainPage {
  controller: web_webview.WebviewController = new web_webview.WebviewController()

  build() {
    Row() {
      Column() {

        Web({ src: $rawfile("drive.html"), controller: this.controller })
      }
      .width('100%')
    }
    .height('100%')
  }
}

效果图

im

六、总结

一个人走的快,一群人走的远,也得益于我是坚果派的成员,互相学习,一起成长,精彩的内容才可以带给大家。比如这次web组件和want组件的学习。