החל מרמת API 3 של Car App, אפשר להשתמש בממשקי API של Car App Library כדי לגשת למאפיינים ולחיישנים של הרכב.
דרישות
כדי להשתמש בממשקי ה-API עם Android Auto, מתחילים בהוספת תלות ב-androidx.car.app:app-projected לקובץ build.gradle של מודול Android Auto. ב-Android Automotive OS, מוסיפים תלות ב-androidx.car.app:app-automotive לקובץ build.gradle של מודול Android Automotive OS.
בנוסף, בקובץ AndroidManifest.xml, צריך להצהיר על ההרשאות הרלוונטיות שנדרשות כדי לבקש את נתוני הרכב שרוצים להשתמש בהם. המשתמש צריך גם להעניק לכם את ההרשאות האלה. אתם יכולים להשתמש באותו קוד ב-Android Auto וב-Android Automotive OS, במקום ליצור תהליכים שמותנים בפלטפורמה. עם זאת, ההרשאות הנדרשות שונות.
CarInfo
בטבלה הזו מתוארים המאפיינים שזמינים בממשקי ה-API של CarInfo וההרשאות שצריך לבקש כדי להשתמש בהם.
| שיטות | מאפיינים | הרשאות: Android Auto |
הרשאות: AAOS |
Car App API |
|---|---|---|---|---|
fetchModel |
יצרן, דגם, שנת ייצור | android.car.permission.CAR_INFO |
3 | |
fetchEnergyProfile |
סוגי מחברים של רכב חשמלי, סוגי דלק | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_INFO |
3 |
fetchExteriorDimensions
הנתונים זמינים רק בחלק מכלי הרכב עם AAOS מגרסה API 30 ואילך. |
מידות חיצוניות | לא רלוונטי | android.car.permission.CAR_INFO |
7 |
| מצב כרטיס האגרה, סוג כרטיס האגרה | 3 | |||
| רמת הטעינה של הסוללה, מפלס הדלק, מפלס הדלק נמוך, הטווח שנותר | com.google.android.gms.permission.CAR_FUEL |
android.car.permission.CAR_ENERGYandroid.car.permission.CAR_ENERGY_PORTSandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| מהירות גולמית, מהירות מוצגת (מוצגת בלוח המחוונים של המכונית) | com.google.android.gms.permission.CAR_SPEED |
android.car.permission.CAR_SPEEDandroid.car.permission.READ_CAR_DISPLAY_UNITS
|
3 | |
| מרחק במד המרחק | com.google.android.gms.permission.CAR_MILEAGE |
הנתונים לא זמינים לאפליקציות ל-Android Automotive OS שהותקנו מ-Google Play. | 3 |
לדוגמה, כדי לקבל את הטווח שנותר, יוצרים מופע של אובייקט CarInfo, ואז יוצרים 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);
אל תניחו שהנתונים מהרכב זמינים בכל רגע. אם מתקבלת שגיאה, כדאי לבדוק את הסטטוס של הערך שביקשתם כדי להבין למה לא ניתן לאחזר את הנתונים שביקשתם. מידע נוסף על הגדרת המחלקה CarInfo זמין במאמרי העזרה.
CarSensors
הכיתה CarSensors מאפשרת לכם לגשת למד התאוצה, לג'ירוסקופ, למצפן ולנתוני המיקום של הרכב. יכול להיות שהזמינות של הערכים האלה תהיה תלויה ביצרן הציוד המקורי. הפורמט של הנתונים ממד התאוצה, מהג'ירוסקופ וממצפן זהה לפורמט שמתקבל מ-SensorManager API.
לדוגמה, כדי לבדוק את כיוון הנסיעה של הרכב:
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);
כדי לגשת לנתוני מיקום מהרכב, צריך גם להצהיר על ההרשאה android.permission.ACCESS_FINE_LOCATION ולבקש אותה.
בדיקה
כדי לדמות נתוני חיישנים כשבודקים ב-Android Auto, אפשר לעיין בקטעים Sensors (חיישנים) וSensor configuration (הגדרת חיישנים) במדריך Desktop Head Unit (יחידה ראשית למחשב). כדי לדמות נתוני חיישנים כשבודקים ב-Android Automotive OS, אפשר לעיין במאמר הדמיה של מצב החומרה במדריך לאמולטור של Android Automotive OS.