Car App API düzeyi 3'ten itibaren, araç özelliklerine ve sensörlerine erişmek için Car App Library API'lerini kullanabilirsiniz.
Şartlar
API'leri Android Auto ile kullanmak için öncelikle Android Auto modülünüzün build.gradle dosyasına androidx.car.app:app-projected bağımlılığı ekleyin. Android Automotive OS için Android Automotive OS modülünüzün build.gradle dosyasına androidx.car.app:app-automotive bağımlılığı ekleyin.
Ayrıca, AndroidManifest.xml dosyanızda, kullanmak istediğiniz araç verilerini istemek için gereken ilgili izinleri beyan etmeniz gerekir. Bu izinler, kullanıcı tarafından da verilmelidir. Platforma bağlı akışlar oluşturmak yerine Android Auto ve Android Automotive OS'te aynı kodu kullanabilirsiniz. Ancak, gereken izinler farklıdır.
CarInfo
Bu tabloda, CarInfo API'lerinde sağlanan özellikler ve bunları kullanmak için istemeniz gereken izinler açıklanmaktadır.
| Yöntemler | Özellikler | İzinler: Android Auto |
İzinler: AAOS |
Car App API |
|---|---|---|---|---|
fetchModel |
Marka, model, yıl | android.car.permission.CAR_INFO |
3 | |
fetchEnergyProfile |
Elektrikli araç konnektör türleri, yakıt türleri | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_INFO |
3 |
fetchExteriorDimensions
Veriler yalnızca API 30 veya sonraki sürümleri çalıştıran bazı AAOS araçlarında kullanılabilir. |
Dış boyutlar | Yok | android.car.permission.CAR_INFO |
7 |
| Ücret kartı durumu, ücret kartı türü | 3 | |||
| Pil seviyesi, yakıt seviyesi, düşük yakıt seviyesi, kalan mesafe | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Gerçek hız, gösterge hızı (aracın gösterge ekranında gösterilir) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| Kilometre sayacı mesafesi | com.google.android.gms.permission.CAR_MILEAGE |
Google Play'den yüklenen Android Automotive OS uygulamalarında veriler kullanılamaz. | 3 |
Örneğin, kalan aralığı almak için bir CarInfo nesnesi oluşturun, ardından bir OnCarDataAvailableListener oluşturup kaydedin:
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);
Aracın verilerinin her zaman kullanılabileceğini varsaymayın. Hata alırsanız istediğiniz değerin durumunu kontrol ederek istediğiniz verilerin neden alınamadığını daha iyi anlayabilirsiniz. CarInfo
Sınıf tanımı hakkında daha fazla bilgi edinmek için referans belgelerine bakın.
CarSensors
CarSensors sınıfı, aracın ivme ölçer, jiroskop, pusula ve konum verilerine erişmenizi sağlar. Bu değerlerin kullanılabilirliği OEM'ye bağlı olabilir. İvme ölçer, jiroskop ve pusuladan alınan verilerin biçimi, SensorManager API'den aldığınız verilerin biçimiyle aynıdır.
Örneğin, aracın yönünü kontrol etmek için:
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);
Aracın konum verilerine erişmek için android.permission.ACCESS_FINE_LOCATION iznini de bildirmeniz ve istemeniz gerekir.
Test
Android Auto'da test yaparken sensör verilerini simüle etmek için Masaüstü Ana Birim kılavuzunun Sensörler ve Sensör yapılandırması bölümlerine bakın. Android Automotive OS'te test yaparken sensör verilerini simüle etmek için Android Automotive OS Emulator Kılavuzu'ndaki Donanım durumunu taklit etme bölümüne bakın.