Mulai dari level API Aplikasi Mobil 3, Anda dapat menggunakan API Library Aplikasi Mobil untuk mengakses sensor dan properti kendaraan.
Persyaratan
Untuk menggunakan API dengan Android Auto, mulailah dengan menambahkan dependensi pada
androidx.car.app:app-projected ke file build.gradle untuk modul Android
Auto Anda. Untuk Android Automotive OS, tambahkan dependensi pada
androidx.car.app:app-automotive ke file build.gradle untuk modul Android
Automotive OS Anda.
Selain itu, dalam file AndroidManifest.xml, Anda harus mendeklarasikan
izin yang relevan yang diperlukan untuk meminta data mobil yang ingin Anda gunakan. Izin
ini juga harus diberikan kepada Anda oleh pengguna. Anda dapat menggunakan
kode yang sama di Android Auto dan Android Automotive OS, daripada
membuat alur yang bergantung pada platform. Namun, izin yang diperlukan berbeda.
CarInfo
Tabel ini menjelaskan properti yang disediakan di API CarInfo dan izin yang harus Anda minta untuk menggunakannya.
| Metode | Properti | Izin: Android Auto |
Izin: AAOS |
Car App API |
|---|---|---|---|---|
fetchModel |
Merek, model, tahun | android.car.permission.CAR_INFO |
3 | |
fetchEnergyProfile |
Jenis konektor EV, jenis bahan bakar | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_INFO |
3 |
fetchExteriorDimensions
Data hanya tersedia di beberapa kendaraan AAOS yang menjalankan API 30 atau yang lebih baru. |
Dimensi eksterior | T/A | android.car.permission.CAR_INFO |
7 |
| Status kartu tol, jenis kartu tol | 3 | |||
| Tingkat daya baterai, tingkat bahan bakar, tingkat bahan bakar rendah, jarak yang tersisa | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Kecepatan mentah, kecepatan tampilan (ditampilkan di layar cluster mobil) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Jarak odometer | com.google.android.gms.permission.CAR_MILEAGE |
Data tidak tersedia untuk aplikasi Android Automotive OS yang diinstal dari Google Play. | 3 |
Misalnya, untuk mendapatkan rentang yang tersisa, buat instance objek CarInfo, lalu buat dan daftarkan 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);
Jangan berasumsi bahwa data dari mobil tersedia setiap saat. Jika Anda mendapatkan
error, periksastatus nilai yang Anda minta untuk lebih memahami alasan
data yang Anda minta tidak dapat diambil. Untuk mempelajari lebih lanjut definisi class CarInfo, lihat dokumentasi referensi.
CarSensors
Class CarSensors memberi Anda akses ke data akselerometer,
giroskop, kompas, dan lokasi kendaraan. Ketersediaan nilai ini dapat bergantung pada OEM. Format data dari akselerometer, giroskop, dan kompas sama dengan yang Anda dapatkan dari SensorManager API.
Misalnya, untuk memeriksa arah kendaraan:
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);
Untuk mengakses data lokasi dari mobil, Anda juga perlu mendeklarasikan dan meminta izin
android.permission.ACCESS_FINE_LOCATION.
Uji
Untuk menyimulasikan data sensor saat menguji di Android Auto, lihat bagian Sensor dan Konfigurasi sensor dalam panduan Desktop Head Unit. Untuk menyimulasikan data sensor saat menguji di Android Automotive OS, lihat Menyimulasikan status hardware dalam panduan emulator Android Automotive OS.