با شروع از API سطح ۳ اپلیکیشن خودرو، میتوانید از APIهای کتابخانه اپلیکیشن خودرو برای دسترسی به مشخصات و حسگرهای خودرو استفاده کنید.
الزامات
برای استفاده از APIها با Android Auto، با اضافه کردن یک وابستگی به androidx.car.app:app-projected به فایل build.gradle ماژول Android Auto خود شروع کنید. برای سیستم عامل Android Automotive، یک وابستگی به androidx.car.app:app-automotive به فایل build.gradle ماژول Android Automotive OS خود اضافه کنید.
علاوه بر این، در فایل AndroidManifest.xml خود، باید مجوزهای مربوطه مورد نیاز برای درخواست دادههای خودرو مورد نظر خود را اعلام کنید . این مجوزها همچنین باید توسط کاربر به شما اعطا شوند. میتوانید از همان کد در Android Auto و Android Automotive OS استفاده کنید، به جای اینکه جریانهای وابسته به پلتفرم ایجاد کنید. با این حال، مجوزهای مورد نیاز متفاوت هستند.
اطلاعات خودرو
این جدول ویژگیهای ارائه شده در APIهای CarInfo و مجوزهایی که برای استفاده از آنها باید درخواست کنید را شرح میدهد.
| روشها | خواص | مجوزها: اندروید اتو | مجوزها: AAOS | API اپلیکیشن خودرو |
|---|---|---|---|---|
fetchModel | ساخت، مدل، سال | android.car.permission.CAR_INFO | ۳ | |
fetchEnergyProfile | انواع کانکتور خودروهای برقی، انواع سوخت | com.google.android.gms.permission.CAR_FUEL | android.car.permission.CAR_INFO | ۳ |
fetchExteriorDimensionsدادهها فقط در مورد برخی از خودروهای AAOS که از API 30 یا بالاتر استفاده میکنند، موجود است. | ابعاد بیرونی | ناموجود | android.car.permission.CAR_INFO | ۷ |
| وضعیت کارت عوارض، نوع کارت عوارض | ۳ | |||
| سطح باتری، سطح سوخت، سطح سوخت پایین، برد مسافت باقی مانده | com.google.android.gms.permission.CAR_FUEL | android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS | ۳ | |
| سرعت خام، سرعت نمایش داده شده (روی صفحه نمایش خوشه ای خودرو نشان داده شده است) | com.google.android.gms.permission.CAR_SPEED | android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS | ۳ | |
| فاصله کیلومترشمار | com.google.android.gms.permission.CAR_MILEAGE | دادهها برای برنامههای سیستم عامل اندروید اتوموبیل که از گوگل پلی نصب شدهاند، در دسترس نیست. | ۳ |
برای مثال، برای دریافت محدوده باقیمانده، یک شیء CarInfo نمونهسازی کنید، سپس یک OnCarDataAvailableListener ایجاد و ثبت کنید:
کاتلین
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)
جاوا
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);
فرض نکنید که دادههای ماشین همیشه در دسترس هستند. اگر با خطایی مواجه شدید، وضعیت مقداری که درخواست کردهاید را بررسی کنید تا بهتر بفهمید چرا دادههای درخواستی شما قابل بازیابی نیستند. برای کسب اطلاعات بیشتر در مورد تعریف کلاس CarInfo ، به مستندات مرجع مراجعه کنید.
سنسورهای خودرو
کلاس CarSensors به شما امکان دسترسی به دادههای شتابسنج، ژیروسکوپ، قطبنما و موقعیت مکانی خودرو را میدهد. در دسترس بودن این مقادیر ممکن است به سازنده اصلی (OEM) بستگی داشته باشد. قالب دادههای شتابسنج، ژیروسکوپ و قطبنما همان قالبی است که از API SensorManager دریافت میکنید.
برای مثال، برای بررسی جهت حرکت خودرو:
کاتلین
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)
جاوا
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);
برای دسترسی به دادههای موقعیت مکانی از طریق خودرو، باید مجوز android.permission.ACCESS_FINE_LOCATION را نیز اعلام و درخواست کنید.
تست
برای شبیهسازی دادههای حسگر هنگام آزمایش در Android Auto، به بخشهای حسگرها و پیکربندی حسگر در راهنمای واحد هد دسکتاپ مراجعه کنید. برای شبیهسازی دادههای حسگر هنگام آزمایش در سیستم عامل Android Automotive، به بخش شبیهسازی وضعیت سختافزار در راهنمای شبیهساز Android Automotive OS مراجعه کنید.