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 |
| Estado e tipo do cartão de pedágio | 3 | |||
| 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_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Velocidade bruta, velocidade mostrada (exibida no painel do carro) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| 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.