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 |
| Estado do cartão de pedágio, tipo de cartão de pedágio | 3 | |||
| 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_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Velocidade bruta, velocidade de exibição (mostrada no cluster 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 |
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.