APIs de hardware para carros

A partir do nível 3 da API Car App, você pode 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, você deve declarar as permissões relevantes para solicitar os dados do carro que você quer usar. O usuário também precisa conceder essas permissões. 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 CarInfo APIs 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, 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 que executam a API 30 ou mais recente.

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

addTollListener

removeTollListener

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

addEnergyLevelListener

removeEnergyLevelListener

Nível de 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 de exibição (mostrada no cluster 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 Dados não disponíveis para apps do Android Automotive OS instalados no Google Play. 3

Por exemplo, para receber a autonomia restante, instancie 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 suponha 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 solicitados 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 oferece 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, giroscópio, e bússola é o mesmo que você receberia da SensorManager API.

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 os dados de localização do carro, você também precisa declarar e solicitar a permissão android.permission.ACCESS_FINE_LOCATION.

Teste

Para simular dados do sensor 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 o estado do hardware no guia do emulador do Android Automotive OS.