التركيز على الصوت

قبل بدء بث منطقي، يطلب التطبيق أولويّة الصوت باستخدام سمات الصوت نفسها المستخدَمة في البث المنطقي. ويجب أن يراعي التطبيق حالات فقدان التركيز ليعمل على النحو المتوقّع في حالات الاستخدام في السيارات.

ننصح بإرسال طلب التركيز، ولكن لا يفرضه النظام. لذلك، ننصحك باعتبار التركيز وسيلة للتحكّم بشكل غير مباشر في التشغيل وتجنُّب التعارض أثناءه بدلاً من اعتباره آلية أساسية للتحكّم في الصوت. ولا يجب أن تعتمد السيارة على نظام التركيز لتشغيل النظام الفرعي الصوتي.

التفاعلات مع التركيز

لدعم نظام التشغيل Android Automotive، تتم معالجة طلبات أولويّة الصوت استنادًا إلى التفاعلات المحدّدة مسبقًا بين CarAudioContext للطلب وCarAudioContext لحاملي أولويّة الصوت الحاليين. هناك ثلاثة أنواع من التفاعلات:

  • مجموعة حصرية
  • رفض
  • متزامن

تفاعل حصري

هذا هو نموذج التفاعل الأكثر استخدامًا مع Android.

في التفاعلات الحصرية ، يُسمح لتطبيق واحد فقط بالتركيز في كل مرة. لذلك، يتم منح التركيز لطلب التركيز الوارد، بينما يفقد حامل التركيز الحالي التركيز. بما أنّ كلا التطبيقَين يشغّلان الوسائط، يُسمح لتطبيق واحد فقط بالتركيز. نتيجةً لذلك، يتم عرض طلب التركيز الخاص بالتطبيق الذي تم تشغيله حديثًا مع AUDIOFOCUS_REQUEST_GRANTED، بينما يتلقّى تطبيق الموسيقى الذي يتم تشغيله حاليًا حدثًا لتغيير التركيز يتضمّن حالة فقدان تتوافق مع نوع الطلب الذي تم تقديمه.

تفاعل الرفض

في التفاعلات الرافضة ، يتم رفض الطلب الوارد دائمًا. على سبيل المثال، عند محاولة تشغيل الموسيقى أثناء إجراء مكالمة. في هذه الحالة، إذا كان تطبيق Dialer يحمل أولويّة الصوت لإجراء مكالمة وطلب تطبيق ثانٍ التركيز لتشغيل الموسيقى، يتلقّى تطبيق الموسيقى AUDIOFOCUS_REQUEST_FAILED ردًا على الطلب. بما أنّ طلب التركيز مرفوض، لا يتم إرسال أي إشعار بفقدان التركيز إلى حامل التركيز الحالي.

تفاعل متزامن

تتفرّد التفاعلات المتزامنة بنظام التشغيل Android Automotive. تمنح هذه التفاعلات التطبيقات التي تطلب التركيز على الصوت في السيارة إمكانية التركيز بشكل متزامن مع تطبيقات أخرى. لكي يحدث تفاعل متزامن، يجب استيفاء الشروط التالية. وهي:

إذا تم استيفاء هذه المعايير، يعرض طلب التركيز AUDIOFOCUS_REQUEST_GRANTED بدون أن يتغيّر التركيز لحامل التركيز الحالي. ومع ذلك، إذا اختار حامل التركيز الحالي تلقّي أحداث التخفيض أو الإيقاف المؤقت عند التخفيض، يفقد حامل التركيز الحالي التركيز، كما يحدث مع التفاعل الحصري.

التعامل مع البث المتزامن

مع أنّ التفاعل المتزامن له استخدامات عديدة، يجب توخّي الحذر عند المزج والتخفيض على مستوى الأجهزة بين أجهزة الإخراج. ننصح بشدة بتوجيه مثيلات CarAudioContext التي يُسمح لها بالتشغيل بشكل متزامن إلى أجهزة إخراج مختلفة.

من خلال استخدام أجهزة إخراج منفصلة للبث المتزامن، يتيح ذلك لطبقة HAL تخفيض أحد البث قبل مزجها، أو توجيه البث الفعلي إلى مكبّرات صوت مختلفة في السيارة. إذا تم مزج البث المنطقي ضِمن Android، تظل عمليات التحسين بدون تغيير ويتم تسليمها كجزء من البث الفعلي نفسه.

على سبيل المثال، عند تسليم التنقّل والوسائط في الوقت نفسه، يمكن تقليل التحسين مؤقتًا لبث الوسائط (أو تخفيضه) حتى يمكن سماع تعليمات التنقّل بوضوح أكبر. بدلاً من ذلك، يمكن توجيه بث التنقّل إلى مكبّرات الصوت على جانب السائق بينما تستمر الوسائط في التشغيل في بقية المقصورة.

مصفوفة التفاعلات

يعرض هذا الجدول مصفوفة التفاعلات كما حدّدها CarAudioService. يمثّل كل صف CarAudioContext لحامل التركيز الحالي، ويمثّل كل عمود CarAudioContext للطلب الوارد.

على سبيل المثال، عندما يركّز تطبيق وسائط موسيقى بينما يطلب تطبيق تنقّل التركيز، تشير المصفوفة إلى أنّه يمكن تشغيل التفاعلين بشكل متزامن، بافتراض استيفاء المعايير الأخرى للتفاعلات المتزامنة.

بسبب التفاعلات المتزامنة، من الممكن أن يكون هناك أكثر من حامل تركيز واحد. في هذه الحالة، تتم مقارنة طلب التركيز الوارد بكل حامل من حاملي التركيز الحاليين قبل تحديد التفاعل الذي سيتم تطبيقه. في هذه الحالة، يفوز التفاعل الأكثر تحفظًا. الرفض، ثم الحصري، وأخيرًا المتزامن.

مصفوفة التفاعل مع أولويّة الصوت

الشكل 1: مصفوفة تفاعل أولويّة الصوت

في Android 11، تم تقديم إعداد جديد للمستخدمين للسماح لهم بتغيير سلوك التفاعل بين التنقّل والمكالمات الهاتفية. عند الضبط، android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL يتم تغيير التفاعل بين طلبات التركيز الواردة NAVIGATION وحاملي التركيز الحاليين CALL من متزامن إلى رفض. إذا كان المستخدم يفضّل عدم مقاطعة تعليمات التنقّل للمكالمة، يمكنه تفعيل الإعداد. يتم الاحتفاظ بهذا الإعداد للمستخدم، ويمكن ضبطه ديناميكيًا بحيث تراعي طلبات التركيز اللاحقة الإعداد الجديد.

أولويّة الصوت القابلة للتأخير

في Android 11، أضاف نظام التشغيل Android Automotive إمكانية طلب أولويّة الصوت القابلة للتأخير. يسمح ذلك بتأخير طلبات التركيز غير المؤقتة عندما يؤدي تفاعلها مع حاملي التركيز الحاليين عادةً إلى رفضها. عندما يؤدي تغيير التركيز إلى حالة يمكن فيها للطلب المؤجّل التركيز، يتم منح الطلب.

قواعد طلبات التركيز على الصوت المؤجّل

  • الطلبات غير المؤقتة فقط: لا يمكن تقديم طلب مؤجّل إلا للمصادر غير المؤقتة لتجنُّب تشغيل صوت مؤقت بعد فترة طويلة من انتهاء أهميته.

  • يمكن تأخير طلب واحد فقط في كل مرة: إذا تم تقديم طلب قابل للتأخير بينما كان هناك طلب مؤجّل، يتلقّى الطلب المؤجّل الأصلي حدث تغيير AUDIOFOCUS_LOSS، ويتلقّى الطلب الجديد ردًا متزامنًا من AUDIOFOCUS_REQUEST_DELAYED.

  • يجب أن تتضمّن الطلبات القابلة للتأخير OnAudioFocusChangeListener. بعد تأخير الطلب، يتم استخدام أداة معالجة الحدث لإشعار مقدّم الطلب عندما يتم منح الطلب في النهاية (AUDIOFOCUS_GAIN)، أو إذا تم رفضه لاحقًا (AUDIOFOCUS_LOSS).

طلب التركيز القابل للتأخير

لإنشاء طلب يمكن تأخيره، اتّبِع الخطوات التالية:

  1. استخدِم AudioFocusRequest.Builder#setAcceptsDelayedFocusGain.

    mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener();
    
    mDelayedFocusRequest = new AudioFocusRequest
         .Builder(AudioManager.AUDIOFOCUS_GAIN)
         .setAudioAttributes(mMusicAudioAttrib)
         .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener)
         .setForceDucking(false)
         .setWillPauseWhenDucked(false)
         .setAcceptsDelayedFocusGain(true)
         .build();
    
  2. عند تقديم الطلب، تعامَل مع الرد AUDIOFOCUS_REQUEST_DELAYED:

    int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest);
    if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        // start audio playback
        return;
    }
    if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
         // audio playback delayed to audio focus listener
         return;
    }
    
  3. عند تأخير الطلب، تتعامل أداة معالجة التركيز مع التغييرات في التركيز:

    private final class MediaWithDelayedFocusListener implements
    OnAudioFocusChangeListener {
           @Override
           public void onAudioFocusChange(int focusChange) {
               synchronized (mLock) {
                   switch (focusChange) {
                       case AudioManager.AUDIOFOCUS_GAIN:
                            // Start focus playback
                       case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                            // Pause media transiently
                       case AudioManager.AUDIOFOCUS_LOSS:
                            // Stop media
    

التلاشي الذي يفرضه النظام

يقدّم Android 15 ميزة تلاشي الصوت التي يفرضها النظام في Android Automotive. في Android، لا يفرض النظام أولويّة الصوت. لذلك، مع أنّنا نشجع مطوّري التطبيقات على الالتزام بإرشادات أولويّة الصوت، إذا استمر أحد التطبيقات في التشغيل بصوت عالٍ حتى بعد فقدان أولويّة الصوت، لا يمكن للنظام منعه.

في بيئات السيارات التي تتسم بأهمية بالغة للسلامة، يكون الالتزام بأولويّة الصوت أمرًا حيويًا لتقليل تشتت انتباه السائق. باستخدام هذه الميزة، يؤدي إطار عمل الصوت الآن تلقائيًا إلى تلاشي التطبيقات التي تفقد التركيز على الصوت، ما يوفّر تجربة صوتية أكثر تحكّمًا وقابلية للتوقّع.

يساعد هذا التحسين في ضمان التزام التطبيقات بقرار فقدان أولويّة الصوت كما هو محدّد في مصفوفة التفاعلات، ما يمنع حدوث تعارضات في تشغيل الصوت.

التصميم عالي المستوى

يوضّح الشكل التالي التصميم عالي المستوى ودعم ميزة فقدان التركيز في السيارات:

تصميم رفيع المستوى لميزة التلاشي التي يفرضها النظام

الشكل 2: التصميم عالي المستوى لميزة التلاشي التي يفرضها النظام

  • التلاشي المستهدَف: تم تصميم ميزة التلاشي التي يفرضها النظام في Android 15 خصيصًا للحالات التي يفقد فيها أحد التطبيقات التركيز على الصوت ولكنه يستمر في تشغيل الصوت.
  • آلية التلاشي: عندما يفقد أحد التطبيقات أولويّة الصوت لصالح تطبيق جديد يطلب التركيز:
    • يؤدي إطار عمل الصوت تلقائيًا إلى تلاشي صوت التطبيق الذي يفقد التركيز.
    • بعد التلاشي، يتم كتم صوت البث الصوتي من قِبل النظام.
    • يتلقّى التطبيق بعد ذلك إشعارًا بفقدان أولويّة الصوت.
    • يتم كتم صوت التطبيقات التي تتصرف بشكل غير لائق إلى أن تستعيد أولويّة الصوت.
    • المنطق التلقائي هو تلاشي التطبيقات التي تم تلاشيها بعد ثانيتَين. ومع ذلك، يمكن للمصنّعين الأصليين ضبط ذلك على أي قيمة مهلة.
    • يستخدم إطار عمل الصوت إعدادات المصنّع الأصلي للجهاز لكل من عمليات التلاشي والتلاشي التدريجي.
  • ملف إعدادات المصنّع الأصلي للجهاز: يتضمّن Android 15 ملف إعداد جديدًا، هو car_audio_fade_configuration.xml:

    • يسمح هذا الملف للمصنّعين الأصليين للجهاز بتحديد المعايير التي يتم بموجبها تطبيق ميزة فرض التركيز على الصوت في النظام على تطبيق يفقد التركيز.
    • لا يفرض إطار عمل الصوت التلاشي والكتم إلا إذا كان التطبيق الذي يفقد التركيز يطابق القواعد التي حدّدها المصنّع الأصلي للجهاز في ملف XML هذا.
    • يوفر ذلك آلية للمصنّعين الأصليين للجهاز لتخصيص سلوك الميزة استنادًا إلى خصائص التطبيق أو أنواع استخدام الصوت.
  • التحكّم في الميزة باستخدام RRO: تم تقديم علامة ميزة جديدة لتراكب الموارد في وقت التشغيل (RRO)، هي audioUseFadeManagerConfiguration، لتفعيل هذه الميزة أو إيقافها:

    • تكون هذه الميزة غير مفعّلة تلقائيًا.
    • لتفعيل ميزة فقدان أولوية الصوت التي يفرضها النظام، يجب أن يضبط المصنّعون الأصليون للجهاز هذه العلامة على true.
    • مع أنّ إطار عمل الصوت في السيارة يتوقّع تعريفات إعدادات تلاشي صالحة عند تفعيل العلامة، لا يؤدي عدم توفّر هذه التعريفات تلقائيًا إلى حدوث استثناء خطير.
    • يجب أن تتضمّن جميع التطبيقات التي تستخدم إعدادات التلاشي تعريفات تلاشي متطابقة. من الخطأ الفادح الإشارة إلى إعداد تلاشي (باسمها) كجزء من إعدادات الصوت في السيارة بدون تقديم تعريف صالح.
    • عند إيقاف العلامة، يتم تجاهل جميع تعريفات إعدادات التلاشي وأي مراجع للإعدادات.

إعداد مدير التلاشي

يقدّم إطار عمل الصوت في Android 15 FadeManagerConfiguration موحّدًا لتزويد المصنّعين الأصليين للجهاز بإمكانية التحكّم الدقيق في سلوك تلاشي الصوت. يوضّح الشكل 3 إطار العمل هذا:

إعدادات مدير التلاشي

الشكل 3: إعداد مدير التلاشي

يتضمّن هذا الإعداد ما يلي:

  • خصائص الانتقال بين الإطارات باستخدام تأثير التلاشي: إعدادات كل من التلاشي والتلاشي التدريجي
    • يمكن تعريفها باستخدام سمات أو استخدامات صوتية معيّنة.
    • تسمح بإعدادات المدة المخصّصة.
    • تُستخدَم هذه الإعدادات لإنشاء VolumeShaper.Configuration.
  • سياسات التلاشي: قواعد تحدّد متى يحدث التلاشي
    • مفتاح تبديل عام لتفعيل التلاشي أو إيقافه
    • قائمة قابلة للإعداد بالاستخدامات الصوتية القابلة للتلاشي (المؤهّلة للتلاشي عند فقدان التركيز)
    • تمنع قوائم الاستبعاد (غير القابلة للتلاشي) تلاشي المصادر الصوتية المهمة أو المحدّدة. يمكن أن تستند هذه القوائم إلى:
      • أنواع المحتوى
      • سمات الصوت
      • معرّفات المستخدمين للتطبيقات (يمكن ضبطها أثناء وقت التشغيل فقط)

إعدادات المصنّع الأصلي للجهاز

في هذا القسم، سنلقي نظرة على التخصيصات المتاحة للمصنّعين الأصليين للجهاز.

ملف XML لإعدادات تلاشي الصوت في السيارة

يقدّم Android 15 ملف إعداد جديدًا، هو car_audio_fade_configuration.xml، ما يتيح للمصنّعين الأصليين للجهاز تخصيصًا واسع النطاق لسلوك تلاشي الصوت أثناء فقدان التركيز.

  • يسمح ملف XML هذا بتحديد إعدادات تلاشي متعدّدة ومختلفة، ويتطلب كل منها اسمًا فريدًا للإشارة المرجعية المتبادلة ضِمن car_audio_configuration.xml.
  • يمكن تطبيق هذه الإعدادات بمرونة على مناطق صوتية مختلفة وإعدادات ضبط مختلفة للمناطق.
  • تجدر الإشارة إلى أنّ كل إعداد تلاشي يقبل قيم المدة بال ملّي ثانية فقط، ثم يستخدمها النظام لإنشاء ال مقابل VolumeShaper.Configuration داخليًا.

للحصول على إرشادات عملية حول التنفيذ، يُرجى الرجوع إلى نماذج الإعدادات المقدّمة للمحاكي والموجودة في device/generic/car/emulator/audio/car_audio_fade_configuration.xml.

ملف XML لإعدادات الصوت في السيارة

يقدّم Android 15 ملف car_audio_configuration.xml معدَّلاً، وهو الآن في الإصدار 4، ويتضمّن علامتَي applyFadeConfigs وfadeConfig جديدتَين. يمكن أن تحتوي العلامة applyFadeConfigs على تعريفات fadeConfig متعدّدة، ما يسمح بإعدادات تلاشي مرنة. كل تعريف:

  • يجب أن يتضمّن fadeConfig تلقائيًا واحدًا تم تحديده باستخدام isDefault = true.
  • يمكن أن يتضمّن عدة تعريفات fadeConfig مؤقتة. يتم تطبيق هذه الإعدادات المؤقتة تحديدًا أثناء تفاعلات فقدان أولويّة الصوت، وفقط عندما يطابق التطبيق الذي يكتسب أولويّة الصوت المعايير المحدّدة ضِمن الإعداد المؤقت.

للحصول على إرشادات عملية حول التنفيذ، يُرجى الرجوع إلى نماذج الإعدادات المقدّمة للمحاكي والموجودة في device/generic/car/emulator/audio/car_audio_configuration.xml.

إضافة خدمة أولويّة الصوت في السيارة من المصنّع الأصلي للجهاز

يتمتع المصنّعون الأصليون للجهاز الذين ينفّذون خدمة مخصّصة لأولويّة الصوت في السيارة بالمرونة اللازمة لضبط إعدادات تلاشي الصوت من خلال تضمينها ضِمن OemCarAudioFocusResult. ويمكن تحقيق ذلك باستخدام طريقة الإنشاء setAudioAttributesToCarAudioFadeConfigurationMap():

/** @see OemCarAudioFocusResult#getAudioAttributesToCarAudioFadeConfigurationMap() **/
@NonNull
public Builder setAudioAttributesToCarAudioFadeConfigurationMap(@NonNull
        Map<AudioAttributes, CarAudioFadeConfiguration> attrsToCarAudioFadeConfig) {
}

تجدر الإشارة إلى أنّه يمكن للمصنّعين الأصليين للجهاز اختيار استخدام إعدادات التلاشي التي تم ضبطها مسبقًا في وقت التشغيل أو تطبيق الإعدادات ديناميكيًا من خلال خدمة التركيز على الصوت المخصّصة، ما يوفّر تحكّمًا قابلاً للتكيّف.

مخطط التسلسل

يوضّح مخطط التسلسل هذا السلوك بعد منح التركيز على الصوت إلى App2 وفقدان App1 التركيز على الصوت لاحقًا:

  • عندما ترسل خدمة الصوت في السيارة إشعارًا بفقدان أولويّة الصوت إلى App1، يخضع التشغيل من مشغّل App1 لعملية تلاشي كما هو محدّد في FadeManagerConfiguration النشطة. بعد اكتمال عملية التلاشي، يتلقّى App1 معاودة الاتصال العادية بفقدان أولويّة الصوت.
  • يمكن اختياريًا إعادة تلاشي صوت App1 بعد مدة قابلة للإعداد. يتمتع المصنّعون الأصليون للجهاز بالمرونة اللازمة لضبط هذه المدة من خلال Builder#setFadeInDurationForUsage(int, long) وفقًا لمتطلبات منتجاتهم المحدّدة.

مخطط التسلسل لميزة التلاشي في صوت السيارة

الشكل 4: مخطط التسلسل لميزة تلاشي الصوت في السيارة

إدارة التركيز في مناطق متعدّدة

بالنسبة إلى المركبات التي تحتوي على مناطق صوتية متعدّدة، تتم إدارة أولويّة الصوت بشكل مستقل لكل منطقة. على هذا النحو، لا يأخذ الطلب المقدَّم إلى منطقة واحدة في الاعتبار ما يركّز عليه في المناطق الأخرى، ولا يؤدي إلى فقدان حاملي التركيز في المناطق الأخرى للتركيز. باستخدام ذلك، يمكن إدارة التركيز في المقصورة الرئيسية بشكل منفصل عن نظام الترفيه في المقعد الخلفي، وبالتالي عدم مقاطعة تشغيل الصوت في منطقة واحدة بسبب التغييرات التي يتم إجراؤها على التركيز في منطقة أخرى.

بالنسبة إلى جميع التطبيقات، تدير CarAudioService التركيز تلقائيًا. يتم تحديد المنطقة الصوتية لطلب التركيز من خلال UserId أو UID المرتبطَين به (لمعرفة التفاصيل، يُرجى الاطّلاع على مقالة توجيه الصوت في مناطق متعدّدة).

طلب الصوت من مناطق متعدّدة بشكل متزامن

إذا أراد أحد التطبيقات تشغيل الصوت في مناطق متعدّدة بشكل متزامن، يجب أن يطلب التركيز لكل منطقة من خلال تضمين AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID في الحزمة:

//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
               zoneId);

AudioAttributes attributesWithZone = new AudioAttributes.Builder()
     .setUsage(AudioAttributes.USAGE_MEDIA)
     .addBundle(bundle)
     .build();

//Create focus request using built attributesWithZone

تسمح مَعلمة الحزمة هذه لمقدّم الطلب بتجاهل عمليات الربط التلقائية للمناطق الصوتية واستخدام رقم تعريف المنطقة المحدّد بدلاً من ذلك. لذلك، يمكن أن يقدّم التطبيق طلبات منفصلة لمناطق صوتية مختلفة.

أولويّة الصوت في طبقة تجريد الأجهزة (HAL)

بدءًا من Android 11، يتم تفعيل طبقة HAL لطلب التركيز نيابةً عن البث الخارجي. مع أنّ استخدام واجهات برمجة التطبيقات هذه اختياري، ننصح بشدة باستخدامها للسماح للأصوات الخارجية بأن تكون مشارِكة على النحو الأمثل في منظومة Android المتكاملة وتوفير تجربة سلسة للمستخدم.

تتخذ طبقة HAL القرار النهائي بشأن الأصوات التي يجب أن تحظى بالأولوية. إلى هذا الحد، يجب تشغيل أصوات الطوارئ والأصوات المهمة للسلامة بغض النظر عمّا إذا تم منح طبقة تجريد الأجهزة (HAL) أولويّة الصوت أم لا، ويجب أن تستمر في التشغيل على النحو المناسب حتى إذا فقدت طبقة تجريد الأجهزة (HAL) أولويّة الصوت. وينطبق الشيء نفسه على أي أصوات تتطلبها اللوائح الحكومية.

يجب أن تعمل طبقة HAL بشكل استباقي على كتم صوت بث Android على النحو المناسب عند تشغيل أصوات الطوارئ أو الأصوات المهمة للسلامة لضمان سماعها بوضوح.

‫AudioControl@2.0

يقدّم الإصدار 2.0 من AudioControl HAL واجهات برمجة التطبيقات الجديدة هذه:

واجهة برمجة التطبيقات الغرض
IAudioControl#registerFocusListener تسجيل مثيل من IFocusListener باستخدام الـ AudioControl HAL. تتيح أداة معالجة الحدث هذه لطبقة HAL طلب التركيز على الصوت وإلغاءه توفر طبقة HAL مثيلاً من ICloseHandle لاستخدامه من قِبل Android لإلغاء تسجيل أداة معالجة الحدث.
IAudioControl#onAudioFocusChange إشعار طبقة HAL بالتغييرات في حالة طلبات التركيز التي تقدّمها طبقة HAL من خلال IFocusListener، بما في ذلك الردود على طلبات التركيز الأولية
IFocusListener#requestAudioFocus طلب التركيز نيابةً عن طبقة HAL لاستخدام محدّد ورقم تعريف منطقة، ونوع اكتساب التركيز
IFocusListener#abandonAudioFocus إلغاء طلبات التركيز الحالية لطبقة HAL للاستخدام ورقم تعريف المنطقة المحدّدَين

يمكن أن يكون لدى طبقة HAL طلبات تركيز متعدّدة في الوقت نفسه، ولكن يقتصر ذلك على طلب واحد لكل استخدام ورقم تعريف منطقة. يفترض Android أنّ طبقة HAL تبدأ على الفور في تشغيل الأصوات لاستخدام معيّن بمجرد تقديم الطلب وتستمر في ذلك إلى أن تلغي التركيز.

باستثناء registerFocusListener، تكون هذه الطلبات oneway لضمان عدم تأخير Android لطبقة HAL أثناء معالجة طلب التركيز. يجب ألا تنتظر طبقة HAL اكتساب التركيز قبل تشغيل الأصوات المهمة للسلامة. من الاختياري أن تستمع طبقة تجريد الأجهزة (HAL) إلى التغييرات في أولويّة الصوت وتستجيب لها من خلال IAudioControl#onAudioFocusChange.

خدمة أولويّة الصوت في السيارة من المصنّع الأصلي للجهاز

في Android 14، قدّم نظام التشغيل Android Automotive خدمات المكوّنات الإضافية للمصنّعين الأصليين للجهاز في السيارة لتفعيل إمكانية الإعداد لبعض مكوّنات السيارة. بالنسبة إلى خدمة المكوّن الإضافي للصوت في السيارة، تسمح خدمة المكوّن الإضافي للمصنّعين الأصليين للجهاز بإدارة طلبات التركيز التي تعترضها خدمة الصوت في السيارة. يمنح ذلك المصنّعين الأصليين للجهاز مزيدًا من المرونة من حيث إدارة التركيز على النحو المطلوب بموجب القواعد واللوائح. على هذا النحو، قد يختلف التفاعل مع أولويّة الصوت بين المصنّعين، ومن منطقة إلى أخرى. لا يزال المبدأ الأساسي لأولويّة الصوت ساريًا، وهو أنّه يجب أن تطلب التطبيقات أولويّة الصوت لإدارة الصوت بشكل أفضل وتحسين تجربة المستخدم. بشكل عام، لا تزال بعض القواعد سارية على طلب التركيز على الصوت من قِبل التطبيقات:

  • بدون أي تركيز على الصوت قائم وذو أولوية عالية (بما في ذلك مكالمة هاتفية أو تنبيه طوارئ أو إشعار بالسلامة)، يجب أن تتمكّن التطبيقات من اكتساب التركيز على الصوت بشكل مؤقت أو دائم.

  • أثناء تفعيل التركيز على الوسائط:

    • يجب أن تتمكّن التطبيقات التي تطلب التركيز على استخدام المكالمات من تلقّي المكالمة بشكل متزامن أو حصري.

    • يجب أن تتمكّن التطبيقات التي تطلب التركيز على استخدام التنقّل من تلقّي التركيز على التنقّل بشكل متزامن أو حصري.

    • يجب أن تتمكّن التطبيقات التي تطلب التركيز على استخدام "مساعد Google" من تلقّي التركيز على الاستخدام بشكل متزامن أو حصري.

  • أثناء تفعيل التطبيقات التي تستخدم التركيز على الصوت القائم وذو الأولوية العالية (بما في ذلك مكالمة هاتفية أو تنبيه طوارئ أو إشعار بالسلامة)، يجب منح أي طلب وارد للتركيز على الصوت المؤجّل أو تأخيره حسب الحاجة.

مع أنّ هذه الاقتراحات ليست شاملة، يمكن أن تساعد التطبيقات التي تطلب التركيز في الحصول على التركيز إذا لم تكن هناك أي أصوات نشطة ذات أولوية عالية. حتى أثناء تفعيل الأصوات ذات الأولوية العالية، يجب أن تظل طلبات التركيز المؤجّل محترمة ويجب أن تتمكّن من اكتساب التركيز عند توقّف الصوت ذي الأولوية العالية.