鴻蒙OS 開(kāi)發(fā)車(chē)輛控制應(yīng)用

2020-09-18 17:54 更新

場(chǎng)景介紹

HarmonyOS 提供了車(chē)輛控制的能力接口,開(kāi)發(fā)者可以基于其能力接口,開(kāi)發(fā)相關(guān)的控制應(yīng)用。例如,通過(guò)應(yīng)用來(lái)控制車(chē)內(nèi)空調(diào)溫度、車(chē)窗開(kāi)合程度、雨刷器、左右后視鏡,查詢發(fā)動(dòng)機(jī)運(yùn)行狀況、轉(zhuǎn)速等。

說(shuō)明

車(chē)輛控制能力與車(chē)廠車(chē)型息息相關(guān),HarmonyOS 提供統(tǒng)一的標(biāo)準(zhǔn)接口,具體能力請(qǐng)參考各個(gè)車(chē)輛說(shuō)明。

接口說(shuō)明

  • 車(chē)機(jī)專(zhuān)有硬件服務(wù)連接類(lèi) Vehicle,支持車(chē)機(jī)專(zhuān)有硬件所有服務(wù)連接能力,同時(shí)攜帶自動(dòng)重試機(jī)制。當(dāng)車(chē)機(jī)專(zhuān)有硬件服務(wù)連接或者斷開(kāi)時(shí),支持開(kāi)發(fā)者實(shí)現(xiàn)自定義回調(diào),具體開(kāi)放能力如下:
接口名 描述
connect() 連接指定車(chē)機(jī)專(zhuān)有硬件服務(wù)。
disconnect() 斷開(kāi)指定車(chē)機(jī)專(zhuān)有硬件服務(wù)。
isConnected() 判斷指定車(chē)機(jī)專(zhuān)有硬件服務(wù)是否已連接。

  • 車(chē)輛座艙管理類(lèi) VehicleCabinManager,提供了車(chē)輛座艙信號(hào)訪問(wèn)控制方法,例如車(chē)門(mén)、空調(diào)。開(kāi)發(fā)者可以通過(guò)定義的車(chē)輛信號(hào)標(biāo)識(shí)來(lái)獲取或者設(shè)置對(duì)應(yīng)的信號(hào)值,完成對(duì)車(chē)輛座艙的控制,具體開(kāi)放能力如下:
接口名 描述
getVehicleSignal() 獲取座艙相關(guān)設(shè)備的信號(hào)值。
getVehicleSignalMultiAreas() 獲取座艙指定信號(hào)的多區(qū)域值。
setVehicleActuator() 設(shè)置車(chē)輛座艙信號(hào)值。
subscribeVehicleSignal() 訂閱指定的座艙信號(hào)。
unsubscribeVCabinSignal() 取消訂閱指定的座艙信號(hào)。
unsubscribeVCabinSignalAll() 取消訂閱全部座艙信號(hào)。

  • 車(chē)輛車(chē)身管理類(lèi) VehicleBodyManager,提供了車(chē)輛車(chē)身設(shè)備控制相關(guān)的方法,例如雨刷器、擋風(fēng)玻璃、清潔劑、車(chē)燈、引擎蓋、行李箱等設(shè)備控制信息,具體開(kāi)放能力如下:
接口名 描述
getVehicleSignal() 獲取車(chē)身相關(guān)設(shè)備的信號(hào)值。
getVehicleSignalMultiAreas() 獲取車(chē)身指定信號(hào)的多區(qū)域值。
setVehicleActuator() 設(shè)置車(chē)輛車(chē)身的信號(hào)值。
subscribeVehicleSignal() 訂閱指定的車(chē)身信號(hào)。
unsubscribeVBodySignal() 取消訂閱指定的車(chē)身信號(hào)。
unsubscribeVBodySignalAll() 取消訂閱全部車(chē)身信號(hào)。

  • 車(chē)輛底盤(pán)管理類(lèi) VehicleChassisManager,提供了車(chē)輛底盤(pán)設(shè)備控制相關(guān)的方法,例如獲取車(chē)輛重量、軸距、方向盤(pán)轉(zhuǎn)向角度等。具體開(kāi)放能力如下:
接口名 描述
getVehicleSignal() 獲取車(chē)輛底盤(pán)相關(guān)設(shè)備信號(hào)值。
getVehicleSignalMultiAreas() 獲取車(chē)輛底盤(pán)指定信號(hào)的多區(qū)域值。
setVehicleActuator() 設(shè)置車(chē)輛底盤(pán)相關(guān)設(shè)備的狀態(tài)值。
subscribeVehicleSignal() 訂閱指定的車(chē)輛底盤(pán)信號(hào)。
unsubscribeVChassisSignal() 取消訂閱指定的車(chē)輛底盤(pán)信號(hào)。
unsubscribeVChassisSignalAll() 取消訂閱全部的車(chē)輛底盤(pán)信號(hào)。

  • 車(chē)輛引擎管理類(lèi) VehicleDriveTrainManager,提供了車(chē)輛引擎相關(guān)控制方法,例如控制變速箱模式,獲取發(fā)動(dòng)機(jī)轉(zhuǎn)速等,具體開(kāi)放能力如下:
接口名 描述
getVehicleSignal() 獲取車(chē)輛引擎相關(guān)設(shè)備信號(hào)值。
getVehicleSignalMultiAreas() 獲取車(chē)輛引擎指定信號(hào)的多區(qū)域值。
setVehicleActuator() 設(shè)置車(chē)輛引擎信號(hào)相關(guān)參數(shù)值。
subscribeVehicleSignal() 訂閱指定的車(chē)輛引擎信號(hào)。
unsubscribeVDriveTrainSignal() 取消訂閱指定的車(chē)輛引擎信號(hào)。
unsubscribeVDriveTrainSignalAll() 取消訂閱全部車(chē)輛引擎信號(hào)。

  • 通常在汽車(chē)使用過(guò)程中,駕駛員需要實(shí)時(shí)了解車(chē)輛的健康狀態(tài),從而判斷車(chē)輛是那個(gè)部位出現(xiàn)故障,因此 HarmonyOS 提供了

OBD(on-board diagnostics)

相關(guān)接口,供三方開(kāi)發(fā)者開(kāi)發(fā)車(chē)輛健康監(jiān)測(cè)相關(guān)應(yīng)用,更好服務(wù)于大眾。

接口名 描述
getVehicleSignal() 獲取OBD相關(guān)實(shí)時(shí)信號(hào)值。
getVehicleSignalMultiAreas() 獲取OBD指定信號(hào)的多區(qū)域值。
setVehicleActuator() 設(shè)置OBD相關(guān)設(shè)備值。
subscribeVehicleSignal() 訂閱指定的OBD設(shè)備信號(hào)。
unsubscribeVOBDSignal() 取消訂閱指定的OBD設(shè)備信號(hào)。
unsubscribeVOBDSignalAll() 取消訂閱全部的OBD設(shè)備信號(hào)。

  • 車(chē)輛配置屬性管理類(lèi) VehicleConfigurationManager,提供了車(chē)輛靜態(tài)屬性信息查詢接口,例如車(chē)輛燃油類(lèi)型,車(chē)輛外觀尺寸等基本屬性信息,具體開(kāi)放能力如下:
接口名 描述
getVehicleSize() 獲取車(chē)輛尺寸,包括:長(zhǎng)、寬、高等信息。
getVehicleFuelType() 獲取車(chē)輛燃油類(lèi)型。
getVehiclereFuelPosition() 獲取燃油口位置信息。
getVehiclereTransmissionConfiguration() 獲取變速器類(lèi)型。
getVehicleWheelDiameter() 獲取輪胎尺寸。
getVehicleSteeringWheelConfiguration() 獲取車(chē)輛方向盤(pán)配置信息。
getVehicleACRISS() 獲取汽車(chē)租賃公司使用的 ACRISS 汽車(chē)分類(lèi)代碼。
getVehicleMcuVersion() 獲取車(chē)輛 MCU 版本號(hào)。
getVehicleModel() 獲取車(chē)輛制造型號(hào)。
getVehicleModelYear() 獲取車(chē)輛生產(chǎn)時(shí)間。
getVehicleBrand() 獲取車(chē)輛品牌信息。
getVehicleVIN() 獲取車(chē)輛識(shí)別號(hào)。
getVehicleWMI() 獲取世界制造廠識(shí)別代碼。
getDriverZone() 獲取駕駛位信息。

開(kāi)發(fā)步驟

  1. 連接指定車(chē)機(jī)專(zhuān)有硬件服務(wù)。

   // 獲取服務(wù)連接狀態(tài)變化
   ServiceConnectionListener listener = new ServiceConnectionListener(){
       @Override
       public void onServiceConnected(VehicleServiceName serviceName) {
       }
       @Override
       public void onServiceDisconnected(VehicleServiceName serviceName) {
       }
   };
   // 連接指定車(chē)機(jī)專(zhuān)有硬件服務(wù)
   try {
       Vehicle.connect(VehicleServiceName.VEHICLECONTROL_SERVICE, listener);
       Thread.sleep(2000);
       return true;
   } catch (IllegalStateException | InterruptedException e) {
       Logger.info("Exception:" + e.toString());
       return false;
   }

  1. 根據(jù)不同管理入口類(lèi),調(diào)用對(duì)應(yīng)接口。

   // VehicleCabinManager類(lèi), 座艙天窗管理
   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類(lèi), 獲取車(chē)身前擋風(fēng)玻璃雨刷器狀態(tài)
   zoneId = VehicleZone.ZONE_FRONT;
   String signal Value = VehicleBodyManager.getVehicleSignal(String.class, VehicleBodyManager.ID_BODY_WINDSHIELD_WIPING_STATUS, zoneId);

    
   // VehicleChassisManager類(lèi), 獲取車(chē)輛輪胎寬度
   zoneId = VehicleZone.ZONE_ROW1;
   Short signalValue = VehicleChassisManager.getVehicleSignal(Short.class, VehicleChassisManager.ID_CHASSIS_AXLE_WHEELWIDTH, zoneId);

    
   // VehicleDriveTrainManager類(lèi),設(shè)置車(chē)輛變速箱模式
   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類(lèi),獲取車(chē)輛識(shí)別碼
   String vin = VehicleConfigurationManager.getVehicleVIN();
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)