Car Hardware API

从 Car App API 级别 3 开始,您可以使用汽车应用库 API 访问车辆属性和传感器。

要求

若要将 API 与 Android Auto 搭配使用,首先要将 androidx.car.app:app-projected 的依赖项添加到 Android Auto 模块的 build.gradle 文件中。对于 Android Automotive OS,将 androidx.car.app:app-automotive 的依赖项添加到 Android Automotive OS 模块的 build.gradle 文件中。

此外,在您的 AndroidManifest.xml 文件中,您需要声明请求您要使用的汽车数据所需的相关权限。这些权限还必须由用户授予您。您可以在 Android Auto 和 Android Automotive OS 上使用相同的代码,无需创建依赖于平台的流程。不过,所需的权限有所不同。

CarInfo

下表描述了 CarInfo API 中提供的属性以及使用这些属性时必须请求的权限。

方法 属性 权限:
Android Auto
权限:
AAOS
Car App API
fetchModel 品牌、型号、年份 android.car.permission.CAR_INFO 3
fetchEnergyProfile EV 连接器类型、燃料类型 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 类使您可以访问车辆的加速度计、陀螺仪、指南针和位置数据。这些值的可用性可能取决于 OEM。来自加速度计、陀螺仪和指南针的数据的格式与从 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 模拟器指南中的模拟硬件状态