خدمة المكوّن الإضافي للصوت في السيارة

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

  • التحكّم في أولويّة الصوت
  • التحكّم في مستوى الصوت وكتمه
  • عنصر التحكّم في ميزة "تجنُّب التداخل مع أصوات أخرى"

بنية خدمة المكوّن الإضافي للسيارة

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

صورة

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

public final class OemCarServiceImp extends OemCarService {
    @Override
    public OemCarAudioFocusService getOemAudioFocusService();

    @Override
    public OemCarAudioDuckingService getOemAudioDuckingService();

    @Override
    public OemCarAudioVolumeService getOemAudioVolumeService();
}

للاطّلاع على مثال، راجِع تطبيق الاختبار المرجعي المحدّد في packages/services/Car/tests/OemCarServiceTestApp.

على الرغم من أنّ خدمة السيارة تبدأ الخدمة، إلا أنّها لا ترث تلقائيًا الأذونات المتاحة لخدمة صوت السيارة. وبالتالي، يجب الحصول على أي إذن تتطلّبه خدمات الشركة المصنّعة للمعدات الأصلية باستخدام الآلية المناسبة. على سبيل المثال، اطّلِع على packages/services/Car/data/etc/com.android.car.oemcarservice.testapp.xml.

خدمة صوت السيارة مع بنية خدمة المصنّع الأصلي للمعدات

في AAOS، تدير خدمة الصوت في السيارة الإجراءات التالية:

  • توجيه الصوت
  • التركيز على الصوت
  • تجنب التداخل مع أصوات أخرى
  • مستوى الصوت وكتمه

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

  • التركيز على الصوت
  • تجنب التداخل مع أصوات أخرى
  • مستوى الصوت وكتمه

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

صورة

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

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

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

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

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

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

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

  • التفاعل المتزامن: ويمكن لحاملي التركيز الحفاظ على التركيز في الوقت نفسه.

  • التفاعلات الحصرية: يؤدي طلب التركيز الوارد إلى إزالة التركيز من العنصر الذي يركّز عليه حاليًا.

  • رفض التفاعل تم رفض طلب التركيز الوارد استنادًا إلى المستخدم الحالي الذي يملك التركيز.

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

public interface OEmCarAudioFocusService {
    OemCarAuddioFocusResults evaluateAudioFocusRequest(
        OemCarAudioFocusEvaluationRequest request);
    
    void notifyAudioFocusChange(
        List<AudioFocusEntry> holder,
        List<AudioFocusEntry> losers, int zoneId);
}

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

يمكن استخدام هذه المعلومات لتقييم newFocusRequest مقارنةً بمالكي التركيز الحاليين في focusHolders ومالكي التركيز الحاليين الذين خسروا في focusLosers. يجب أن تعرض واجهة برمجة التطبيقات النتائج التالية:

class OemCarAudioFocusResult {
    int audioZoneId;
    int audioFocusEvaluationResults;
    AudioFocusEntry focusResult;
    List<AudioFocusEntry> newLosers;
    List<AudioFocusEntry> newlyBlocked;
}

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

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

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

واجهة برمجة التطبيقات الثانية، notifyAudioFocusChange، هي واجهة أحادية الاتجاه يتم استدعاؤها عند كل طلب أو إلغاء لأولويّة الصوت. تُستخدَم واجهة برمجة التطبيقات في الغالب لإبلاغ خدمة الشركة المصنّعة للمعدات الأصلية (OEM) بالتغييرات في التركيز، ما قد يؤثر في سلوك خدمة الصوت في السيارة التي توفّرها الشركة المصنّعة للمعدات الأصلية.

إرشادات لتقييم التركيز

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

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

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

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

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

    • يجب أن يكون استخدام "مساعد Google" قابلاً للتركيز عليه، سواء بشكل متزامن أو حصري.

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

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

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

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

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

  1. التنقل
  2. الاتصال
  3. موسيقى
  4. إشعار
  5. طلب صوتي
  6. نغمة رنين الاتصال
  7. صوت النظام
  8. السلامة
  9. المنبّه
  10. إشعار
  11. حالة المركبة
  12. طوارئ

لتبسيط إدارة أحداث مفتاح مستوى الصوت، تتضمّن خدمة الصوت في السيارة قائمة ثانية بالأولوية لسياق الصوت:

  1. الاتصال
  2. الوسائط
  3. إشعار
  4. طلب صوتي

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

يمكن ضبط الإصدار الفعلي من مستوى الصوت باستخدام إعدادات audioVolumeAdjustmentContextsVersion. يمكن ضبط الإعداد على 1 أو 2 (2 هو الإعداد التلقائي).

لتوفير المزيد من المرونة في إدارة مستوى الصوت، تم طرح OemCarAudioVolumeService في نظام التشغيل Android 14:

public interface OemCarAudioVolumeService {
    OemCarvolumeChangeInfo getSuggestedGroupForVolumeChange(
OemCarAudioVolumeRequest request, int volumeAdjustment);
}

تتضمّن خدمة مستوى صوت السيارة من الشركة المصنّعة الأصلية طريقة واحدة تتلقّى volumeAdjustment وOemCarAudioVolumeRequest:

class OemCarAudioVolumeRequest {
    int audioZoneId;
    int callState;
    List<AudioAttributes> activePlaybackAttributes;
    List<AudioAttributes> duckedAttributes;
    List<CarVolumeGroupInfo> volumeGroupState;
}

يحتوي activePlaybackAttributes الخاص بالطلب على سمات الصوت النشطة. تمثّل duckedAttributes جميع سمات الصوت المخفَّض حاليًا. تحتوي السمة volumeGroupState على الحالة الحالية لمجموعة وحدات التخزين. يمثّل الطلب الحالة الحالية لمجموعة الصوت ويمكن استخدامه لتحديد مجموعة الصوت التي يجب تغييرها. يجب عرض النتائج بتنسيق OemCarVolumeChangeInfo:

class OemCarVolumeChangeInfo {
    boolean change;
    CarVolumeGroupInfo volumeGroupChanged;
}

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

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

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

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

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

class OemCarAudioDuckingService {
List<AudioAttributes>   evaluateAttributesToDuck(
        OemCarAudioVolumeRequest request);
}

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

  • سمة الصوت التي يتم خفض مستوى صوتها حاليًا:

    • في القائمة، سيستمر خفض مستوى الصوت
    • غير مضمّن في القائمة، تم إيقاف ميزة "تخفيف الصوت"
  • لم يتم خفض مستوى صوت سمة الصوت حاليًا:

    • في القائمة، تم خفض مستوى الصوت
    • غير مضمّن في القائمة، تم إيقاف ميزة "تخفيف الصوت"

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

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

صورة

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

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

يوفّر نظام التشغيل Android Automotive OS عملية تنفيذ مرجعية لخدمة السيارة التي يقدّمها المصنّع الأصلي للجهاز في packages/services/Car/tests/OemCarServiceTestApp، والتي تنفّذ OemCarService، بالإضافة إلى OemCarAudioFocusService وOemCarAudioDuckingService وOemCarAudioVolumeService. في الحالة الأخيرة، تستخدم كل خدمة ملف XML لتحميل سلوك ثابت. على سبيل المثال، تحمّل OemCarAudioFocusServiceImp oem_focus_config.xml، التي تحتوي على مصفوفة تفاعلية. يتم استخدام المصفوفة لتقييم طلب التركيز عند استدعاء evaluateAudioFocusRequest.

تصحيح أخطاء التطبيق التجريبي المرجعي

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

<!-- This is the component name for the OEM customization service. OEM can choose to implement
this service to customize car service behavior for different policies. If OEMs choose to
implement it, they have to implement a service extending OemCarService exposed by car-lib,
and implement the required component services.
If the component name is invalid, CarService would not connect to any OEM service.
Component name can not be a third party package. It should be pre-installed -->
<string name="config_oemCarService" translatable="false">
com.android.car.oemcarservice.testapp/.OemCarServiceImpl
</string>

للتحقّق من أنّ خدمة السيارة من الشركة المصنّعة الأصلية تستخدم الأمر dump الخاص بخدمة السيارة من أجل خدمة الشركة المصنّعة الأصلية، اتّبِع الخطوات التالية:

adb shell dumpsys car_service --oem-service

قد تكون النتائج مشابهة للمخرجات أدناه:

***CarOemProxyService dump***
  mIsFeatureEnabled: true
  mIsOemServiceBound: true
  mIsOemServiceReady: true
  mIsOemServiceConnected: true
  mInitComplete: true
  OEM_CAR_SERVICE_CONNECTED_TIMEOUT_MS: 5000
  OEM_CAR_SERVICE_READY_TIMEOUT_MS: 5000
  mComponentName: com.android.car.oemcarservice.testapp/.OemCarServiceImpl

يحدّد كل قيمة منطقية في كل مجموعة من معلومات dump حالة الميزة والخدمة. على سبيل المثال، تحدّد معلومات التفريغ mIsOemServiceReady ما إذا كانت الخدمة جاهزة للاستخدام، حيث يشير true إلى أنّها جاهزة ويشير false إلى أنّها غير جاهزة.