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

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

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

التفاعلات التي تركّز على

لدعم AAOS، تتم معالجة طلبات تركيز الصوت استنادًا إلى التفاعلات المحدّدة مسبقًا بين CarAudioContext للطلب وCarAudioContext لمالكي تركيز الصوت الحاليين. هناك ثلاثة أنواع من التفاعلات:

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

تفاعل حصري

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

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

رفض التفاعل

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

التفاعل المتزامن

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

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

التعامل مع أحداث البث المتزامنة

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

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

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

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

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

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

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

مصفوفة التفاعل مع ميزة "التركيز على الصوت"

الشكل 1: مصفوفة التفاعل في ميزة "التركيز على الصوت"

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

ميزة "التركيز على الصوت" التي يمكن تأخيرها

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

قواعد طلبات التركيز على الصوت المتأخرة

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

  • يمكن تأخير طلب واحد فقط في كل مرة. إذا تم تقديم طلب قابل للتأخير بينما كان هناك طلب متأخر، يتلقّى الطلب الأصلي المتأخر حدث تغيير 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 ميزة التلاشي الصوتي التي يفرضها النظام في AAOS. في نظام التشغيل Android، لا يفرض النظام ميزة التركيز على الصوت. لذلك، على الرغم من أنّنا ننصح مطوّري التطبيقات بالالتزام بإرشادات ميزة "التركيز على الصوت"، لا يمكن للنظام منع التطبيق من مواصلة تشغيل المحتوى بصوت عالٍ حتى بعد فقدان التركيز على الصوت.

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

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

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

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

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

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

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

    • يسمح هذا الملف لمصنعي المعدّات الأصلية بتحديد معايير لتطبيق ميزة "التركيز على الصوت" في النظام على التطبيق الذي يفقد التركيز.
    • لا يفرض إطار العمل الصوتي خفض مستوى الصوت وإيقافه إلا إذا كان التطبيق الذي سيتم إيقافه مطابقًا للقواعد التي حدّدها المصنّع الأصلي للجهاز في ملف XML هذا.
    • يقدّم ذلك آلية تتيح لمصنّعي الأجهزة الأصليين تخصيص سلوك الميزة استنادًا إلى خصائص التطبيق أو أنواع استخدام الصوت.
  • التحكّم في الميزة باستخدام تراكب الموارد في الوقت الفعلي: تمّ تقديم علامة جديدة لميزة تراكب الموارد في الوقت الفعلي (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 تركيز الصوت. وينطبق الأمر نفسه على أي أصوات مطلوبة بموجب اللوائح الحكومية.

يجب أن يتم بشكل استباقي كتم صوت أحداث البث على 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 للاستخدام والمنطقة المحدّدَين Id.

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

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

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

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

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

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

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

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

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

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

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