Car Hardware API

從 Car App API 級別 3 開始,您可以使用 Car App Library API 存取車輛屬性和感應器。

需求條件

如要在 Android Auto 中使用這些 API,請先在 Android Auto 模組的 build.gradle 檔案中,新增 androidx.car.app:app-projected 的依附元件。如果是 Android Automotive OS,請在 Android Automotive OS 模組的 build.gradle 檔案中新增 androidx.car.app:app-automotive 的依附元件。

此外,您需要在 AndroidManifest.xml 檔案中宣告相關權限,才能要求使用所需的車輛資料。使用者也必須授予您這些權限。您可以在 Android Auto 和 Android Automotive OS 上使用相同程式碼,不必建立平台專屬流程。但所需權限有所不同。

CarInfo

下表說明 CarInfo API 中提供的屬性,以及使用這些屬性時必須要求的權限。

方法 屬性 權限:
Android Auto
權限:
Android Automotive OS
Car App API
fetchModel 廠牌、型號、年份 android.car.permission.CAR_INFO 3
fetchEnergyProfile 電動車充電插頭類型、燃料類型 com.google.android.gms.permission.CAR_FUEL android.car.permission.CAR_INFO 3
fetchExteriorDimensions

資料僅適用於搭載 API 30 以上版本的特定 AAOS 車輛。

外部尺寸 不適用 android.car.permission.CAR_INFO 7

addTollListener

removeTollListener

付費卡狀態、付費卡類型 3

addEnergyLevelListener

removeEnergyLevelListener

電量、剩餘油量、剩餘油量不足、剩餘里程 com.google.android.gms.permission.CAR_FUEL android.car.permission.CAR_ENERGY

android.car.permission.CAR_ENERGY_PORTS

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addSpeedListener

removeSpeedListener

原始速度、顯示速度 (顯示在車輛儀表板上) com.google.android.gms.permission.CAR_SPEED android.car.permission.CAR_SPEED

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addMileageListener

removeMileageListener

里程表距離 com.google.android.gms.permission.CAR_MILEAGE 從 Google Play 安裝的 Android Automotive OS 應用程式無法存取資料。 3

舉例來說,如要取得剩餘範圍,請例項化 CarInfo 物件,然後建立並註冊 OnCarDataAvailableListener

Kotlin

val carInfo = carContext.getCarService(CarHardwareManager::class.java).carInfo

val listener = OnCarDataAvailableListener<EnergyLevel> { data ->
    if (data.rangeRemainingMeters.status == CarValue.STATUS_SUCCESS) {
      val rangeRemaining = data.rangeRemainingMeters.value
    } else {
      // Handle error
    }
  }

carInfo.addEnergyLevelListener(carContext.mainExecutor, listener)

// Unregister the listener when you no longer need updates
carInfo.removeEnergyLevelListener(listener)

Java

CarInfo carInfo = getCarContext().getCarService(CarHardwareManager.class).getCarInfo();

OnCarDataAvailableListener<EnergyLevel> listener = (data) -> {
  if(data.getRangeRemainingMeters().getStatus() == CarValue.STATUS_SUCCESS) {
    float rangeRemaining = data.getRangeRemainingMeters().getValue();
  } else {
    // Handle error
  }
};

carInfo.addEnergyLevelListener(getCarContext().getMainExecutor(), listener);

// Unregister the listener when you no longer need updates
carInfo.removeEnergyLevelListener(listener);

請勿假設隨時都能取得車輛資料。如果發生錯誤,請檢查所要求值的狀態,進一步瞭解無法擷取所要求資料的原因。如要進一步瞭解 CarInfo 類別定義,請參閱參考說明文件

CarSensors

CarSensors 類別可讓您存取車輛的加速計、陀螺儀、指南針和位置資料。這些值是否可用可能取決於原始設備製造商。加速計、陀螺儀和指南針的資料格式,與您從 SensorManager API 取得的格式相同。

舉例來說,如要查看車輛的航向:

Kotlin

val carSensors = carContext.getCarService(CarHardwareManager::class.java).carSensors

val listener = OnCarDataAvailableListener<Compass> { data ->
    if (data.orientations.status == CarValue.STATUS_SUCCESS) {
      val orientation = data.orientations.value
    } else {
      // Data not available, handle error
    }
  }

carSensors.addCompassListener(CarSensors.UPDATE_RATE_NORMAL, carContext.mainExecutor, listener)

// Unregister the listener when you no longer need updates
carSensors.removeCompassListener(listener)

Java

CarSensors carSensors = getCarContext().getCarService(CarHardwareManager.class).getCarSensors();

OnCarDataAvailableListener<Compass> listener = (data) -> {
  if (data.getOrientations().getStatus() == CarValue.STATUS_SUCCESS) {
    List<Float> orientations = data.getOrientations().getValue();
  } else {
    // Data not available, handle error
  }
};

carSensors.addCompassListener(CarSensors.UPDATE_RATE_NORMAL, getCarContext().getMainExecutor(),
    listener);

// Unregister the listener when you no longer need updates
carSensors.removeCompassListener(listener);

如要存取車輛的位置資訊資料,您也需要宣告並要求 android.permission.ACCESS_FINE_LOCATION 權限。

測試

如要在 Android Auto 測試時模擬感應器資料,請參閱電腦版車用運算主機指南的「感應器」和「感應器設定」章節。如要在 Android Automotive OS 上測試時模擬感應器資料,請參閱 Android Automotive OS 模擬器指南中的「模擬硬體狀態」。