APIs de hardware para carros

A partir do nível 3 da API Car App, é possível usar as APIs da biblioteca Car App para acessar propriedades e sensores do veículo.

Requisitos

Para usar as APIs com o Android Auto, comece adicionando uma dependência em androidx.car.app:app-projected ao arquivo build.gradle do módulo do Android Auto. Para o Android Automotive OS, adicione uma dependência em androidx.car.app:app-automotive ao arquivo build.gradle do módulo do Android Automotive OS.

Além disso, no arquivo AndroidManifest.xml, é necessário declarar as permissões relevantes necessárias para solicitar os dados do carro que você quer usar. Essas permissões também precisam ser concedidas a você pelo usuário. Você pode usar o mesmo código no Android Auto e no Android Automotive OS, em vez de criar fluxos dependentes da plataforma. No entanto, as permissões necessárias são diferentes.

CarInfo

Esta tabela descreve as propriedades fornecidas nas APIs CarInfo e as permissões que você precisa solicitar para usá-las.

Métodos Propriedades Permissões:
Android Auto
Permissões:
AAOS
API Car App
fetchModel Marca, modelo e ano android.car.permission.CAR_INFO 3
fetchEnergyProfile Tipos de conector de VE, tipos de combustível com.google.android.gms.permission.CAR_FUEL android.car.permission.CAR_INFO 3
fetchExteriorDimensions

Dados disponíveis apenas em alguns veículos AAOS com a API 30 ou mais recente.

Dimensões externas N/A android.car.permission.CAR_INFO 7

addTollListener

removeTollListener

Estado e tipo do cartão de pedágio 3

addEnergyLevelListener

removeEnergyLevelListener

Nível da bateria, nível de combustível, nível de combustível baixo, autonomia restante 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

Velocidade bruta, velocidade mostrada (exibida no painel do carro) com.google.android.gms.permission.CAR_SPEED android.car.permission.CAR_SPEED

android.car.permission.READ_CAR_DISPLAY_UNITS
3

addMileageListener

removeMileageListener

Distância do odômetro com.google.android.gms.permission.CAR_MILEAGE Os dados não estão disponíveis para apps do Android Automotive OS instalados no Google Play. 3

Por exemplo, para receber o intervalo restante, crie uma instância de um objeto CarInfo e crie e registre um 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);

Não presuma que os dados do carro estejam disponíveis o tempo todo. Se você receber um erro, verifique o status do valor solicitado para entender melhor por que os dados não puderam ser recuperados. Para saber mais sobre a definição da classe CarInfo, consulte a documentação de referência.

CarSensors

A classe CarSensors dá acesso aos dados de acelerômetro, giroscópio, bússola e localização do veículo. A disponibilidade desses valores pode depender do OEM. O formato dos dados do acelerômetro, do giroscópio e da bússola é o mesmo que você receberia da API SensorManager.

Por exemplo, para verificar a direção do veículo:

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);

Para acessar dados de localização do carro, também é necessário declarar e solicitar a permissão android.permission.ACCESS_FINE_LOCATION.

Teste

Para simular dados de sensores ao testar no Android Auto, consulte as seções Sensores e Configuração de sensores do guia da unidade principal do computador. Para simular dados de sensores ao testar no Android Automotive OS, consulte Emular estado de hardware no guia do emulador do Android Automotive OS.