從 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 |
| 付費卡狀態、付費卡類型 | 3 | |||
| 電量、剩餘油量、剩餘油量不足、剩餘里程 | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| 原始速度、顯示速度 (顯示在車輛儀表板上) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| 里程表距離 | 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 模擬器指南中的「模擬硬體狀態」。