הגדרת האודיו באמצעות דגל AAOS

מערכת Android Automotive OS ‏ (AAOS) משתמשת בדגלים ובהגדרות כדי להפעיל תכונות שונות, החל מניתוב דינמי ועד לדגלים כלליים יותר של תכונות, כמו בקרת עוצמת הקול משירות הרכב. כאן מתוארים דגלי ההגדרה הנוכחיים של AAOS לניהול אודיו.

סימון המטרה
audioUseDynamicRouting מוגדר בקובץ התצורה של שירות הרכב כדי להפעיל ניתוב ב-AAOS. צריך להגדיר את ההגדרה בתור true. כשהמדיניות false, הניתוב וחלק גדול מ-CarAudioService מושבתים, מערכת ההפעלה חוזרת להתנהגות ברירת המחדל שמתוארת בקטע הגדרת מדיניות האודיו.
audioUseCarVolumeGroupMuting מוגדר בקובץ התצורה של שירות הרכב כדי לאפשר השתקה של קבוצות נפח ספציפיות. כשהערך מוגדר ל-false (ערך ברירת המחדל), ההשתקה של קבוצות נפח ספציפיות מושבתת. במקום זאת, ההשתקה מפעילה או משביתה את ההשתקה הראשית. כשהערך מוגדר ל-true, ההשתקה של קבוצת עוצמת הקול ברכב מופעלת וניתן להשתיק כל קבוצת עוצמת קול בנפרד. כשהערך הוא true, צריך להטמיע את ההשתקה של קבוצת עוצמת הקול ב-Audio Control HAL.
audioUseHalDuckingSignals מוגדר בקובץ התצורה של שירות הרכב כדי לאפשר ל-IAudioControl#onDevicesToDuckChange API להודיע ל-HAL מתי להתכופף. כשהערך הוא true (ערך ברירת המחדל), ה-API מקבל אותות שמציינים אילו מכשירי פלט להשתיק ואילו שימושים להתמקד בהם. כשהערך הוא false, לא מתבצעת קריאה ל-API. ה-API לא נקרא אלא אם Audio Control HAL מטמיע את ההשתקה.
config_oemCarService השם של הרכיב בשירות להתאמה אישית של יצרן ציוד מקורי, שמוגדר בקובץ התצורה של שירות הרכב. יצרני ציוד מקורי יכולים להטמיע את השירות הזה כדי להתאים אישית את הפעולות של שירותי הרכב למדיניות שונה. אם יצרני ציוד מקורי (OEM) בוחרים להטמיע את הרכיב הזה, הם צריכים להטמיע שירות להרחבת OemCarService שמוצג על ידי car-lib, ואז להטמיע את שירותי הרכיבים הנדרשים. בשירותי אודיו לרכב, יצרני ציוד מקורי יכולים להטמיע כל אחד משירותי האודיו המשניים כדי לנהל את הפעולות שקשורות לאודיו. למידע נוסף, קראו את המאמר שירות הפלאגין של Car Audio. אם שם הרכיב לא תקין, CarService לא יתחבר לאף שירות של יצרן ציוד מקורי. שם הרכיב לא יכול להיות חבילת צד שלישי. האפליקציה חייבת להיות מותקנת מראש.
audioVolumeAdjustmentContextsVersion

הגדרה בקובץ התצורה של שירות הרכב, שמאפשרת לבחור את הגרסה של רשימת העדיפויות של ההקשר של התאמת עוצמת הקול.

גרסה 1 כוללת את כל ההקשרים של האודיו, לפי הסדר הבא:

  • NAVIGATION
  • CALL
  • MUSIC
  • ANNOUNCEMENT
  • VOICE_COMMAND
  • CALL_RING
  • SYSTEM_SOUND
  • SAFETY
  • ALARM
  • NOTIFICATION
  • VEHICLE_STATUSEMERGENCY

גרסה 2 מוגבלת להקשרים הבאים, לפי הסדר הזה.

גרסת ברירת המחדל היא 1.

  • CALL
  • MUSIC
  • ANNOUNCEMENT
  • VOICE_COMMAND
audioPersistMasterMuteState מוגדר בקובץ התצורה של שירות הרכב, הגדרה לשמירה של מצב ההשתקה הגלובלי. כשהערך הוא true (ערך ברירת המחדל), Android משחזרת את מצב ההשתקה הגלובלי במהלך האתחול. כשהערך של audioUseCarVolumeGroupMuting הוא true, אין לכך השפעה על שינויים קבועים בהשתקת האודיו, כי השינויים בהשתקה מבוססים על קבוצות נפח ספציפיות. ערך ברירת המחדל מוגדר כ-true, וצריך לשנות אותו אם לא רוצים שההשתקה הראשית תישמר במכשיר.
audioVolumeKeyEventTimeoutMs

הגדרה בקובץ התצורה של שירות הרכב, שמציינת את זמן הקצאת הזמן באלפיות השנייה בזמן שקבוצת עוצמת הקול ברכב נחשבת לפעילה לשינויים בשליטה בעוצמת הקול במהלך אירועים של לחצני עוצמת הקול. ההגדרות משמשות באופן הבא:

  • הזמן הקצוב לתפוגה משמש לקביעת אם עדיין אפשר להביא בחשבון הפעלה (עוצמת האודיו שמשויכת לשימוש באודיו של ההפעלה) לבחירת עוצמת קול אוטומטית אחרי שההפעלה הופסקה.
  • זמן הקצאת הזמן משמש גם כמשך ההשהיה הנדרש בין התאמות אוטומטיות של עוצמת הקול כדי לשנות את מה שהמשתמש מכוונן.

ערך ברירת המחדל הוא 3000 אלפיות שנייה, ו-OEM צריכים לשנות אותו בהתאם לחוויית המשתמש.

audioUseCarVolumeGroupEvent הגדרה בקובץ התצורה של שירות הרכב, שמאפשרת להפעיל אירועי קריאה חוזרת לקבוצות נפח אחסון. כשהערך של true הוא 1, הלקוחות מקבלים שיחה חוזרת דרך ICarVolumeGroupEvent לגבי אירועים שמשפיעים על קבוצות נפח. כשהיא מופעלת:

  • מומלץ מאוד לספקים לתמוך גם ב-IAudioControl#setModuleChangeCallback וב-IAudioControl#registerGainCallback לאירועים ולשינויים בחומרת האודיו.
  • כשגם CarVolumeCallback וגם CarVolumeGroupEventCallback רשומים על ידי אותה אפליקציה, הקריאות החוזרות של אינדקס קבוצת עוצמת הקול ושל ההשתקה של קבוצת עוצמת הקול יעברו דרך CarVolumeGroupEventCallback בלבד. לכן, מומלץ מאוד להעביר את כל האפליקציות לממשק החדש של קריאה חוזרת כדי להבטיח ביצועים עקביים.
  • ערך ברירת המחדל הוא false. מומלץ להגדיר את הערך הזה ל-true כי ממשקי ה-API שתומכים בקריאות חזרה (callbacks) של נפח מהדור קודם הוצאו משימוש ויוסר בקרוב.

config_useFixedVolume מוגדר בקובץ frameworks/base/core/res/res/values/config.xml. צריך להגדיר את הערך ל-true כדי לאפשר לשירות האודיו ברכב לנהל את בקרת עוצמת הקול. אם הדגל config_useFixedVolume לא מוגדר, או מוגדר כ-false (ערך ברירת המחדל), אפליקציות יכולות להפעיל את ממשקי ה-API לניהול עוצמת הקול AudioManager ולשנות את עוצמת הקול לפי סוג הסטרימינג במיקסר התוכנה. יכול להיות שזה לא רצוי בגלל ההשפעה הפוטנציאלית על אפליקציות אחרות, והעובדה שהקטנת עוצמת הקול במיקסר התוכנה עלולה לגרום לכך שיהיה פחות ביטים משמעותיים שזמינים באות כשהוא מתקבל במגבר החומרה. מכשירים חדשים שלא הוגדרו והוגדר להם true לקבלת שינויים בנפח באמצעות ממשקי ה-API של הנפח וההשתקה AudioManager.
config_handleVolumeKeysInWindowManager מוגדר ב-frameworks/base/core/res/res/values/config.xml, וצריך להגדיר אותו כ-true כדי לאפשר לשירות האודיו ברכב ליירט אירועים מרכזיים של עוצמת קול. אם הערך מוגדר כ-false (ערך ברירת המחדל), אירועי מפתחות עוצמת הקול יכולים להישלח לאפליקציה שבחזית, וכתוצאה מכך יכולות להיות תוצאות שליליות בניהול אירועי מפתחות עוצמת הקול מחוץ לשירות האודיו ברכב.

הגדרות של שירות אודיו לרכב

לפני Android 13, הגדרות השירות ברכב הוחלפו על ידי שכבת-על של הגדרות המוצר (מידע נוסף זמין במאמר התאמה אישית של ה-build באמצעות שכבות-על של משאבים) בקובץ packages/services/Car/service/res/values/config.xml.

PRODUCT_PACKAGE_OVERLAYS := <path_to_overlay>

המיקום של קובץ התצורה מ-<path_to_overlay> למיקום בפועל צריך לכלול את packages/services/Car/service/res/values/.

שירותי רכב: רשויות רישוי ורשות

החל מגרסה 13 של Android, מערכת AAOS תומכת בשכבות-על של משאבים בסביבת זמן ריצה. שימוש ב-RRO כדי לשנות את הערך של הגדרת האודיו ברכב. לדוגמה, אפשר לעיין ב-RROs של ההפניה cuttlefish לכלי רכב ב-device/google/cuttlefish/shared/auto/rro_overlay/. ההגדרה של audioUseDynamicRouting מוחרגת ב-device/google/cuttlefish/shared/auto/rro_overlay/CarServiceOverlay/res/values/config.xml.

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
...

מפת שכבת-העל של המשאבים נכללת ב-device/google/cuttlefish/shared/auto/rro_overlay/CarServiceOverlay/res/xml/overlays.xml:

<overlay>
...
  <item target="bool/audioUseDynamicRouting"
value="@bool/audioUseDynamicRouting" />
...
</overlay>

המניפסט של שכבת-העל של המשאב שמוגדר ב-device/google/cuttlefish/shared/auto/rro_overlay/CarServiceOverlay/AndroidManifest.xml מכיל את targetPackage שמוגדר כ-com.android.car.updatable.

למידע נוסף, אפשר לעיין במקורות המידע הבאים:

ממשק API עם תכונות מובנות

השיטה מחזירה את הערך true אם התכונה מופעלת במכשיר, אחרת היא מחזירה את הערך false. ב-API של CarAudioManager#isAudioFeatureEnabled, הפרמטר המועבר חייב להיות אחד מהערכים הבאים:

  • AUDIO_FEATURE_DYNAMIC_ROUTING
  • AUDIO_FEATURE_VOLUME_GROUP_MUTING
  • AUDIO_FEATURE_OEM_AUDIO_SERVICE
  • AUDIO_FEATURE_VOLUME_GROUP_EVENTS
  • AUDIO_FEATURE_AUDIO_MIRRORING