codecamp

鸿蒙OS 开发车辆控制应用

场景介绍

HarmonyOS 提供了车辆控制的能力接口,开发者可以基于其能力接口,开发相关的控制应用。例如,通过应用来控制车内空调温度、车窗开合程度、雨刷器、左右后视镜,查询发动机运行状况、转速等。

说明

车辆控制能力与车厂车型息息相关,HarmonyOS 提供统一的标准接口,具体能力请参考各个车辆说明。

接口说明

  • 车机专有硬件服务连接类 Vehicle,支持车机专有硬件所有服务连接能力,同时携带自动重试机制。当车机专有硬件服务连接或者断开时,支持开发者实现自定义回调,具体开放能力如下:
接口名 描述
connect() 连接指定车机专有硬件服务。
disconnect() 断开指定车机专有硬件服务。
isConnected() 判断指定车机专有硬件服务是否已连接。

  • 车辆座舱管理类 VehicleCabinManager,提供了车辆座舱信号访问控制方法,例如车门、空调。开发者可以通过定义的车辆信号标识来获取或者设置对应的信号值,完成对车辆座舱的控制,具体开放能力如下:
接口名 描述
getVehicleSignal() 获取座舱相关设备的信号值。
getVehicleSignalMultiAreas() 获取座舱指定信号的多区域值。
setVehicleActuator() 设置车辆座舱信号值。
subscribeVehicleSignal() 订阅指定的座舱信号。
unsubscribeVCabinSignal() 取消订阅指定的座舱信号。
unsubscribeVCabinSignalAll() 取消订阅全部座舱信号。

  • 车辆车身管理类 VehicleBodyManager,提供了车辆车身设备控制相关的方法,例如雨刷器、挡风玻璃、清洁剂、车灯、引擎盖、行李箱等设备控制信息,具体开放能力如下:
接口名 描述
getVehicleSignal() 获取车身相关设备的信号值。
getVehicleSignalMultiAreas() 获取车身指定信号的多区域值。
setVehicleActuator() 设置车辆车身的信号值。
subscribeVehicleSignal() 订阅指定的车身信号。
unsubscribeVBodySignal() 取消订阅指定的车身信号。
unsubscribeVBodySignalAll() 取消订阅全部车身信号。

  • 车辆底盘管理类 VehicleChassisManager,提供了车辆底盘设备控制相关的方法,例如获取车辆重量、轴距、方向盘转向角度等。具体开放能力如下:
接口名 描述
getVehicleSignal() 获取车辆底盘相关设备信号值。
getVehicleSignalMultiAreas() 获取车辆底盘指定信号的多区域值。
setVehicleActuator() 设置车辆底盘相关设备的状态值。
subscribeVehicleSignal() 订阅指定的车辆底盘信号。
unsubscribeVChassisSignal() 取消订阅指定的车辆底盘信号。
unsubscribeVChassisSignalAll() 取消订阅全部的车辆底盘信号。

  • 车辆引擎管理类 VehicleDriveTrainManager,提供了车辆引擎相关控制方法,例如控制变速箱模式,获取发动机转速等,具体开放能力如下:
接口名 描述
getVehicleSignal() 获取车辆引擎相关设备信号值。
getVehicleSignalMultiAreas() 获取车辆引擎指定信号的多区域值。
setVehicleActuator() 设置车辆引擎信号相关参数值。
subscribeVehicleSignal() 订阅指定的车辆引擎信号。
unsubscribeVDriveTrainSignal() 取消订阅指定的车辆引擎信号。
unsubscribeVDriveTrainSignalAll() 取消订阅全部车辆引擎信号。

  • 通常在汽车使用过程中,驾驶员需要实时了解车辆的健康状态,从而判断车辆是那个部位出现故障,因此 HarmonyOS 提供了

OBD(on-board diagnostics)

相关接口,供三方开发者开发车辆健康监测相关应用,更好服务于大众。

接口名 描述
getVehicleSignal() 获取OBD相关实时信号值。
getVehicleSignalMultiAreas() 获取OBD指定信号的多区域值。
setVehicleActuator() 设置OBD相关设备值。
subscribeVehicleSignal() 订阅指定的OBD设备信号。
unsubscribeVOBDSignal() 取消订阅指定的OBD设备信号。
unsubscribeVOBDSignalAll() 取消订阅全部的OBD设备信号。

  • 车辆配置属性管理类 VehicleConfigurationManager,提供了车辆静态属性信息查询接口,例如车辆燃油类型,车辆外观尺寸等基本属性信息,具体开放能力如下:
接口名 描述
getVehicleSize() 获取车辆尺寸,包括:长、宽、高等信息。
getVehicleFuelType() 获取车辆燃油类型。
getVehiclereFuelPosition() 获取燃油口位置信息。
getVehiclereTransmissionConfiguration() 获取变速器类型。
getVehicleWheelDiameter() 获取轮胎尺寸。
getVehicleSteeringWheelConfiguration() 获取车辆方向盘配置信息。
getVehicleACRISS() 获取汽车租赁公司使用的 ACRISS 汽车分类代码。
getVehicleMcuVersion() 获取车辆 MCU 版本号。
getVehicleModel() 获取车辆制造型号。
getVehicleModelYear() 获取车辆生产时间。
getVehicleBrand() 获取车辆品牌信息。
getVehicleVIN() 获取车辆识别号。
getVehicleWMI() 获取世界制造厂识别代码。
getDriverZone() 获取驾驶位信息。

开发步骤

  1. 连接指定车机专有硬件服务。

   // 获取服务连接状态变化
   ServiceConnectionListener listener = new ServiceConnectionListener(){
       @Override
       public void onServiceConnected(VehicleServiceName serviceName) {
       }
       @Override
       public void onServiceDisconnected(VehicleServiceName serviceName) {
       }
   };
   // 连接指定车机专有硬件服务
   try {
       Vehicle.connect(VehicleServiceName.VEHICLECONTROL_SERVICE, listener);
       Thread.sleep(2000);
       return true;
   } catch (IllegalStateException | InterruptedException e) {
       Logger.info("Exception:" + e.toString());
       return false;
   }

  1. 根据不同管理入口类,调用对应接口。

   // VehicleCabinManager类, 座舱天窗管理
   String propId = VehicleCabinManager.ID_CABIN_SUNROOF_SWITCH;
   int zoneId = VehicleZone.ZONE_NONE;
   String value = "Inactive";
   VehicleActuatorCallback callback = new VehicleActuatorCallback() {
       @Override
       public void onErrorActuator(String propId, int zoneId, int outResult) {
       }
   };
   boolean result = false;
   try {
       VehicleCabinManager.setVehicleActuator(propId, zoneId, callback, value);
       result = true;
   } catch (RemoteException | IllegalArgumentException e) {
       result = false;
   }
   if (!result) {
       System.out.println(String.format("Set sunroof error: %d", result));
   }

    
   // VehicleBodyManager类, 获取车身前挡风玻璃雨刷器状态
   zoneId = VehicleZone.ZONE_FRONT;
   String signal Value = VehicleBodyManager.getVehicleSignal(String.class, VehicleBodyManager.ID_BODY_WINDSHIELD_WIPING_STATUS, zoneId);

    
   // VehicleChassisManager类, 获取车辆轮胎宽度
   zoneId = VehicleZone.ZONE_ROW1;
   Short signalValue = VehicleChassisManager.getVehicleSignal(Short.class, VehicleChassisManager.ID_CHASSIS_AXLE_WHEELWIDTH, zoneId);

    
   // VehicleDriveTrainManager类,设置车辆变速箱模式
   propId = VehicleDriveTrainManager.ID_DRIVETRAIN_TRANSMISSION_PERFORMANCEMODE;
   zoneId = VehicleZone.ZONE_NONE;
   String transmissionValue = "sport";
   VehicleActuatorCallback tmCallback = new VehicleActuatorCallback() {
       @Override
       public void onErrorActuator(String propId, int zoneId, int outResult) {
       }
   };
   try {
       VehicleDriveTrainManager.setVehicleActuator(propId, zoneId, tmCallback, transmissValue);
       result = true;
   } catch (RemoteException | IllegalArgumentException e) {
       result = false;
   }
   if(!result) {
       System.out.println(String.format("Set transmiss performance mode error: %d", result));
   }
   // VehicleConfigurationManager类,获取车辆识别码
   String vin = VehicleConfigurationManager.getVehicleVIN();
鸿蒙OS 定制化系统能力约束
鸿蒙OS OEM扩展接口
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

鸿蒙OS 开发

鸿蒙OS 术语

鸿蒙OS Java API参考

鸿蒙OS ohos.aafwk.ability

鸿蒙OS ohos.aafwk.abilityjet.activedata

鸿蒙OS ohos.aafwk.content

鸿蒙OS java.lang

鸿蒙OS java.Util

鸿蒙OS java.Util class

鸿蒙OS ohos.data.dataability

鸿蒙OS ohos.data.dataability class

鸿蒙OS ohos.agp.components

鸿蒙OS ohos.agp.components interface

鸿蒙OS ohos.agp.components class

鸿蒙OS ohos.global.configuration

鸿蒙OS java.io

鸿蒙OS ohos.data.resultset

鸿蒙OS ohos.data.resultset interface

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }