创新互联鸿蒙OS教程:鸿蒙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() | 获取驾驶位信息。 |
开发步骤
- 连接指定车机专有硬件服务。
// 获取服务连接状态变化
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;
}- 根据不同管理入口类,调用对应接口。
// 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开发车辆控制应用
本文来源:http://www.jxjierui.cn/article/djeppss.html


咨询
建站咨询
