更新记录

1.5.2(2026-09-07)

版本更新问题

1.5.1(2026-09-07)

细节优化

1.5.0(2026-09-07)

  • 手机端和仪表端天气弹框改为按设计稿坐标等比缩放,分别使用底部卡片和仪表横向卡片布局。
  • 移除旧标题栏和共用位置参数,温度单位及固定两条预警文字改由前端显式传入。
  • 两端分别支持装饰背景、关闭按钮、天气、四项指标和两条预警的绝对路径图片配置。
  • 删除旧弹性 XML/StackView 布局及内置天气资源,不为无效输入提供默认图片或兼容分支。
查看更多

平台兼容性

uni-app(4.72)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android Android插件版本 iOS iOS插件版本 鸿蒙
× × - - - - 5.0 1.5.2 12 1.5.2 -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

hl-edrive-auto

亿连手机互联 Android / iOS UTS 插件。它提供 AuthKey 授权、扫码组网、连接状态监听、地图入口、自定义 Marker 和路线坐标提取,并保留 Android SDK 的扫码、投屏、音乐与导航能力。

支持范围

  • uni-app Vue 2 / Vue 3
  • Android 5.0(API 21)及以上,支持 armeabi-v7a、arm64-v8a
  • iOS 12.0 及以上
  • iPhone 真机 arm64
  • Android 亿连 SDK 12.15.0.0807-SNAPSHOT
  • iOS 亿连 SDK V12.15_DYSK02_20260821

插件不支持 HarmonyOS、Web 和 iOS 模拟器。

接入前配置

Android:

  1. 在宿主项目配置与亿连 AuthKey、高德 Key 匹配的应用包名和签名。
  2. 使用真机运行;授权时传入 Android 对应的高德 Key。
  3. 插件已声明互联、定位、蓝牙、相机、悬浮窗、前台服务等 Android 权限,运行时扫码和投屏权限由插件按需申请。

iOS:

  1. 配置与亿连 AuthKey、高德 Key 匹配的 Bundle ID。
  2. 配置开发证书和描述文件。
  3. 开启 Hotspot Configuration 能力。
  4. 开启 Access WiFi Information 能力。

插件已在 utssdk/app-ios/UTS.entitlements 中声明这两项能力,云端打包时会合并到宿主 App;Apple 开发者后台的 App ID 和描述文件也必须同步开启。

插件已经声明本地网络、定位、蓝牙、相机、运动、Bonjour 和后台模式说明。Bundle ID、签名、Team 与 Capability 不写入插件,由宿主项目统一管理。

快速开始

<script setup>
import { onMounted, onUnmounted } from 'vue'

import * as EDriveAuto from '@/uni_modules/hl-edrive-auto'

const start = (authKey, amapKey) => {
  // Key 由业务层在运行时传入,插件原生代码不保存项目 Key。
  EDriveAuto.authorize({ authKey, amapKey }, (authResult) => {
    if (!authResult.success) return

    uni.scanCode({
      onlyFromCamera: true,
      success: ({ result }) => {
        EDriveAuto.connectByQrCode(result, (event) => {
          console.log('组网状态', event.code, event.message)
        })
      }
    })
  })
}

onMounted(() => {
  EDriveAuto.onConnectionStatusChange((event) => {
    if (event.connected) {
      EDriveAuto.openMapHomePage((result) => console.log('打开地图首页', result.success))
    }
  })
})

onUnmounted(() => EDriveAuto.offConnectionStatusChange())
</script>

共用 Demo 使用 uni.scanCode() 获取二维码文本,再调用 connectByQrCode()。Android 也可使用插件独有的 scanQrEc() 或 scanConnectEc() 调起华为 Scan Kit。

API

authorize(options, callback)

设置高德 Key,并使用 AuthKey 完成亿连 SDK 授权。调用其他亿连接口前必须先授权。

参数 类型 说明
options.authKey string 亿连后台 SDK 分发 Key
options.amapKey string 当前运行平台对应的高德地图 Key
callback (result) => void 返回授权结果

connectByQrCode(qrContent, callback)

将扫码结果交给亿连 SDK,SDK 自动完成 Wi-Fi 或蓝牙组网并启动互联服务。回调可能触发多次,terminal 表示当前流程结束。

onConnectionStatusChange(callback)

监听连接状态。注册后立即返回一次当前状态,后续继续接收 SDK 状态变化。

公开状态包括:

  • unauthorized:尚未授权
  • ready:授权完成,等待扫码
  • connecting:正在组网互联
  • connected:普通连接成功
  • mirrorConnected:镜像连接成功
  • disconnected:已断开

offConnectionStatusChange()

移除并释放前端连接状态回调。页面卸载时必须调用。

getConnectionStatus()

同步读取插件当前保存的连接状态快照。

disconnect(callback)

断开当前互联,但不关闭亿连互联服务。再次扫码时插件会先调用 SDK 的重新连接接口。

openMapHomePage(callback)

打开亿连地图首页,并将地图返回目标设置为三方来源页。只有普通连接或镜像连接成功后才能调用。

showEDAMapSearch(callback)

打开高德地图位置选点页面。该接口对应亿连 SDK 的 showEDAMapSearch,只有普通连接或镜像连接成功后才能调用。

addCustomMarker(options, callback)

在亿连原生地图中添加或更新 Marker。相同 markerId 会更新已有 Marker;成功时 handle 即为标准化后的 markerId。

const iconPath = plus.io.convertLocalFileSystemURL('_www/static/marker.png')
const selectedIconPath = plus.io.convertLocalFileSystemURL(
  '_www/static/marker-selected.png'
)

EDriveAuto.addCustomMarker({
  markerId: 'store-1001',
  position: { latitude: 30.578679, longitude: 114.463383 },
  clickable: true,
  iconPath,
  selectedIconPath,
  extraData: {
    temperature: '23',
    temperatureUnit: '°C',
    weather: '雷阵雨',
    pressureLabel: '气压',
    pressure: '1010 hpa',
    humidityLabel: '湿度',
    humidity: '45%',
    windSpeedLabel: '风速',
    windSpeed: '5.1m/s',
    visibilityLabel: '能见度',
    visibility: '8507m',
    yellowAlertText: '前方有雷阵雨',
    redAlertText: '前方有强对流-大风'
  }
}, (result) => console.log('添加 Marker', result))

iOS 使用 iconPath 和 selectedIconPath,两者必须是可读取的绝对文件路径。项目内的静态资源使用 _www/static/... 路径,并通过 plus.io.convertLocalFileSystemURL() 转换后传入。

如果图片来自 uni.chooseImage(),同样需要转换其临时路径:

uni.chooseImage({
  count: 1,
  success(res) {
    const iconPath = plus.io.convertLocalFileSystemURL(res.tempFilePaths[0])

    EDriveAuto.addCustomMarker({
      markerId: 'marker-1',
      position: { latitude: 30.578679, longitude: 114.463383 },
      iconPath
    }, (result) => console.log('添加 Marker', result))
  }
})

不要直接向 iOS 传入 /static/marker.png、@/static/marker.png、网络 URL 或 file:// URL。plus.io 仅在 App 运行环境可用。Android 使用 iconName、iconResNameVirtual 指定宿主 drawable/mipmap 资源名称,并可设置 pageFlag、zIndex。

removeCustomMarker(handle, callback)

移除指定 Marker。addCustomMarker 的回调参数是结果对象,必须保存并传入其中的 result.handle 字符串,不能把整个 result 对象作为 handle。

let markerHandle = ''

EDriveAuto.addCustomMarker(options, (result) => {
  if (result.success && result.handle) {
    markerHandle = result.handle
  }
})

EDriveAuto.removeCustomMarker(markerHandle, (result) => {
  console.log('移除 Marker', result)
})

clearAllCustomMarkers(callback)

清除当前亿连地图中的全部自定义 Marker。

onCustomMarkerClick(callback) / offCustomMarkerClick()

监听原生地图 Marker 点击。回调返回 handle、markerId、坐标和添加 Marker 时传入的 extraData。该监听只返回点击事件,不会自动创建详情弹框。页面卸载时调用 offCustomMarkerClick() 释放持续回调并使最近点击上下文失效。

showCustomMarkerPopup(options, callback)

使用最近一次 Marker 点击产生的原生上下文,显式在手机端和车机端显示天气详情。Android 使用点击回调提供的 Overlay,iOS 使用 eDriveAutoMapMarkerMixer 的双端透明画布。

本仓库的 pages/index/index.vue 已提供完整可运行示例:13 个可见文字字段直接编辑,手机端与仪表端分别配置等比缩放和背景色。测试 Demo 固定使用 static/edrive-weather-popup 内的 9 张设计资源,页面启动时自动转换成原生绝对路径,不再显示图片路径输入项,也不再使用 logo.png 占位。

EDriveAuto.onCustomMarkerClick((event) => {
  if (!event.extraData) return

  const rootPath = '_www/static/'
  const staticRootPath = plus.io.convertLocalFileSystemURL(rootPath)
  const imagePath = (name) => `${staticRootPath}/weather-popup/${name}`
  const createStyle = (scale) => ({
    scale,
    backgroundColor: '#FFFDFDFD',
    backgroundImagePath: imagePath('popup-background.png'),
    closeIconPath: imagePath('close.png'),
    weatherIconPath: imagePath('thunderstorm.png'),
    pressureIconPath: imagePath('pressure.png'),
    humidityIconPath: imagePath('humidity.png'),
    windSpeedIconPath: imagePath('wind-speed.png'),
    visibilityIconPath: imagePath('visibility.png'),
    yellowAlertIconPath: imagePath('warning-yellow.png'),
    redAlertIconPath: imagePath('warning-red.png')
  })

  EDriveAuto.showCustomMarkerPopup({
    handle: event.handle,
    data: event.extraData,
    phoneStyle: createStyle(1),
    vehicleStyle: createStyle(1)
  }, (result) => {
    console.log('手机端显示', result.phoneShown)
    console.log('车机端显示', result.vehicleShown)
  })
})

handle 必须来自最近一次点击事件。再次点击、取消监听、删除对应 Marker 或清空 Marker 后,旧句柄会失效。手机端弹框固定在地图画布底部,仪表端固定在设计稿位置,不再接收共用位置参数。

data 是两端共用的文字数据。温度数值和单位、天气描述、四项指标标签和值、黄色预警文字、红色预警文字全部必填且不能为空。插件按 标签: 值 组合指标,不写死任何业务文字。

phoneStyle 和 vehicleStyle 必须分别完整提供。scale 是当前画布自适应比例上的乘数,必须大于 0;卡片尺寸、内部坐标、字号和图标统一等比缩放。背景色仅支持 #RRGGBB 或 Android 顺序的 #AARRGGBB。

九个图片字段必须是可读取、可解码的绝对文件路径,不接受相对路径、网络 URL、file:// URL 或 content:// URI,也不会使用插件内置图片替代无效输入。用户提供的资源对应关系为:组 836.png 是装饰背景,close.png 是关闭图标,滚动组 23.png 至 滚动组 26.png 依次是气压、湿度、风速和能见度图标。天气主图标及两种预警图标由业务侧另外传入。

手机端以 750 × 1448 地图画布和 720 × 788 卡片为参考,底部居中;仪表端以 1500 × 750 画布和 710 × 400 卡片为参考。任一端点击关闭按钮都会同步移除两端弹框。

setRoutePointCallback(count, callback) / offRoutePointCallback()

从当前规划路线中提取 count 个等距坐标点,count 必须为大于 0 的整数。SDK 路线变化后会继续回调;不再需要时调用 offRoutePointCallback()。

Android 独有接口

这些接口直接在 interface.uts 中声明,不使用 APP-ANDROID 条件声明;业务代码只应在 Android 运行环境调用。

接口 说明
getEcVersion、toEcActivity 获取 SDK 版本、进入亿连原生页面
scanQrEc、scanConnectEc 调起华为 Scan Kit 扫码,或扫码后直接连接
reconnectEc 按指定超时重新连接亿连服务
getMirrorProjectionStatus、startMirrorProjection、stopMirrorProjection 查询和控制镜像投屏;当前 SDK 不支持主动停止投屏,调用停止接口会返回明确错误
initMusicControl、getMusicInfo、refreshMusicInfo、controlMusicPlayback、openMusicPage 音乐状态与播放控制
startNavigation、stopNavigation、getNavigationStatus 导航控制与状态查询
dismissOverlay 关闭亿连地图浮层

错误码

错误码 说明
AUTH_INVALID_ARGUMENT AuthKey 或高德 Key 为空
AUTH_IN_PROGRESS 已有授权请求进行中
AUTH_FAILED 亿连授权失败
CONNECT_NOT_AUTHORIZED 未完成授权
CONNECT_EMPTY_QR 二维码内容为空
CONNECT_IN_PROGRESS 已有组网流程进行中
CONNECT_NOT_CONNECTED 当前没有可断开的连接
CONNECT_UNKNOWN_STATUS SDK 返回未识别的组网状态
MAP_NOT_CONNECTED 未连接车机时请求地图
MAP_OPEN_FAILED 亿连地图页面打开失败
MARKER_INVALID_ARGUMENT Marker 参数或坐标无效
MARKER_EXTRA_DATA_INVALID extraData 无法序列化为 JSON
MARKER_ICON_LOAD_FAILED Marker 本地图片加载失败
POPUP_CONTEXT_UNAVAILABLE 尚未点击 Marker,或最近点击上下文已经失效
POPUP_HANDLE_MISMATCH 弹框句柄不是最近点击的 Marker
POPUP_INVALID_DATA 弹框标题、位置、指标标签或数据格式无效
POPUP_INVALID_STYLE 弹框宽高或背景色无效
POPUP_ICON_NOT_FOUND 图标不是可读取的绝对文件
POPUP_ICON_DECODE_FAILED 图标文件无法被平台图片解码器读取
POPUP_SIZE_OUT_OF_BOUNDS 指定卡片尺寸无法完整放入当前显示端
POPUP_RENDER_FAILED 手机端和车机端弹框均未成功显示
ROUTE_POINT_INVALID_COUNT 路线坐标点数量无效
ROUTE_POINT_FAILED SDK 路线坐标提取失败

组网错误还会返回 nativeCode,对应亿连二维码连接状态码 0...14。

隐私、权限声明

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

本地网络、定位、蓝牙、相机、运动与后台定位/音频能力

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

插件使用本地网络、定位、蓝牙和扫码结果完成手机与车机互联。

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

无

暂无用户评论。