يوضِّح الرسم البياني التالي المكونات التي تتفاعل مع "الوسائط":
الشكل 1: مكونات النظام
يتم وصف العناصر الواردة في هذا الشكل في الجدول التالي:
المكوّن | الوصف |
---|---|
الشاشة الرئيسية | يمثّل مساحات العرض الأخرى في واجهة مستخدم السيارة التي تعرض الوسائط التي يتم تشغيلها حاليًا وتتيح التحكّم فيها. في AOSP، هذه هي الشاشة الرئيسية التي تظهر عند بدء تشغيل النظام. من هذه الشاشة، يمكن للمستخدمين عرض تفاصيل عنصر الوسائط الذي يتم تشغيله وتنفيذ مجموعة محدودة من الإجراءات العادية والمخصّصة (مثل التشغيل والإيقاف المؤقت). |
واجهة مستخدم النظام | توفّر وظائف تتضمّن خيارات التنقل في واجهة المستخدم العامة، مثل الانتقال إلى الوسائط. |
المساعدون | يقدّم Android آليات لتطبيقات المساعد الصوتي المختلفة للتفاعل مع النظام. يمكن لهذه التطبيقات التفاعل مع مصادر الوسائط في الخلفية (على سبيل المثال، تشغيل أغنية نتيجةً لطلب صوتي) أو الانتقال إلى الوسائط في المقدّمة (على سبيل المثال، عندما يتم توجيه تطبيق مساعد صوتي لعرض واجهة مستخدم لمصدر وسائط معيّن). |
مشغِّل التطبيقات | تبدأ جميع تطبيقات Android في "مشغّل التطبيقات"، بما في ذلك "مصادر الوسائط". يمكن أن تقدّم الوسائط أداة اختيار مصدر الوسائط الخاصة بها، ما يكمل أداة "مشغّل التطبيقات" أو يحلّ محلّها كأحد مصادر الوسائط. |
متجر Google Play | عند استخدام GAS، يمكن للمستخدمين العثور على التطبيقات الجديدة وتثبيتها على جهاز Android. بالنسبة إلى الوسائط، بعد تثبيت التطبيقات، يتم توجيه المستخدمين إلى "الوسائط" لإكمال عملية تسجيل الدخول أو لبدء التفاعل مع التطبيق. |
Media Session Manager | خدمة نظام Android التي تتتبّع جلسات الوسائط وتتحكّم فيها من جميع مصادر الوسائط ويقدّم آليات لرصد الحالات التي يصبح فيها مصدر الوسائط هو مصدر الوسائط في المقدّمة. تستخدم الوسائط وجميع التطبيقات الأخرى التي تعرض مصدر الوسائط الذي يتم تشغيله حاليًا (مثل الشاشة الرئيسية) أداة Media Session Manager لرصد هذه الأحداث وتعديل واجهة المستخدم وفقًا لذلك. تتفاعل مصادر الوسائط مع Media Session Manager من خلال Media Session API. |
الراديو | تطبيق مخصّص للتفاعل مع أجهزة الراديو يبحث تطبيق "الراديو" عن محطات الإذاعة ويختار بسرعة المحطات التي تم تحديدها مؤخرًا ويتيح التبديل بين نطاقات الراديو. تتيح مكوّنات واجهة المستخدم المشتركة بين "الراديو" و"الوسائط" للمستخدم التبديل بين تجربتَي الوسائط المختلفتَين. |
محرك تشتت انتباه السائق | خدمة نظام Android المستخدَمة لفرض قيود على تجربة المستخدم استنادًا إلى حالة القيادة في السيارة بالنسبة إلى تجربة المستخدم في تسجيل الدخول إلى مصادر الوسائط وإعداداتها (حيث يتم التحكّم في الشاشة مباشرةً من قِبل مصادر الوسائط)، تضمن هذه الخدمة عدم عرض أي محتوى غير آمن عندما تكون السيارة في وضع القيادة. يمكن للمصنّعين الأصليين للأجهزة تخصيص تعريف هذه الحالات وطريقة تفاعل النظام معها في هذه المواقف (على سبيل المثال، من خلال عرض شاشة حجب). |
مسارات المستخدم
تشغيل تطبيق الوسائط
تظهر العملية التي تبدأ تشغيل "الوسائط" أدناه.
الشكل 2: تشغيل تطبيق الوسائط
يجب تشغيل الوسائط باستخدام العنصر الضمني التالي:
CAR_INTENT_ACTION_MEDIA_TEMPLATE
.
يمكن أن يتضمّن هذا الإجراء المعلومات التالية كإضافات:
-
android.car.intent.extra.MEDIA_COMPONENT
(اختياري) سلسلة إضافية لتمثيل اسم المكوّن المسطّح لملفMediaBrowserService
في تطبيق الوسائط الذي سيتم ربط الوسائط به في حال عدم توفيره، يعرض الوسائط تطبيق الوسائط المحدّد حاليًا. ويتم استخدام هذا الإجراء من نقاط دخول التالية:-
واجهة مستخدِم النظام: يُستخدَم للرجوع إلى تجربة "الوسائط" أو لبدء استخدامها للمرة الأولى. في هذه الحالة، سيتم استخدام النية أعلاه بدون أي إضافات لجعل Media تعرِض تطبيق الوسائط المحدَّد حاليًا.
-
الشاشة الرئيسية والمساعِدون ومركز الإشعارات: يمكن للمستخدمين الانتقال إلى "الوسائط" لعرض تطبيق الوسائط المحدّد حاليًا. وفي جميع الحالات، يتم تشغيل النية الضمنية بدون إضافات.
-
مشغّل التطبيقات: عندما يختار المستخدمون أحد تطبيقات الوسائط من مشغِّل التطبيقات، يتضمّن الإجراء أعلاه الرمز العميق
CAR_EXTRA_MEDIA_COMPONENT
الذي يحتوي على تطبيق الوسائط المحدّد. وتعرِّف الوسائط على هذا الرمز العميق على أنّه التطبيق الذي تم تحديده حديثًا وتتصل به. لمعرفة التفاصيل، يُرجى الاطّلاع على القسم أدناه، "دمج App Launcher مع الوسائط".
-
دمج مشغّل التطبيقات مع الوسائط
لا يُسمح لتطبيقات الوسائط بتقديم أي نشاط تمّت إضافة تعليقات توضيحية إليه باستخدام الفئة
android.intent.category.LAUNCHER
. نتيجةً لذلك، يجب أن ينفِّذ مشغّل التطبيقات (أو مثيله) منطقًا خاصًا لمعالجة دمج مصدر الوسائط:
-
يجب أن يفحص "مشغِّل التطبيقات" النظام بحثًا عن الحِزم التي تنفِّذ
MediaBrowserService.SERVICE_INTERFACE
. بالنسبة إلى هذه الحِزم، يُجلب "مشغّل التطبيقات" رمز الخدمة المشابه للرمز المستخدَم في جلب أنشطة أخرى. -
بعد ذلك، يجمع "مشغّل التطبيقات" هذه الحِزم مع الحِزم التي تنفِّذ
android.intent.category.LAUNCHER
الأنشطة. إذا كان التطبيق يقدّم تنفيذًا لميزةMediaBrowserService
ونشاطًا لتطبيق مشغّل التطبيقات، تكون الخدمة هي التي تحظى بالأولوية.في وقت كتابة هذه المقالة، لا يمكن لأي تطبيق مصدر وسائط توفير نشاط مشغّل.
- يمكنك العثور على مثال على هذا المنطق في رمز AOSP على الرابط:
AppLauncherUtils#getAllLauncherApps()
.
مسار تسجيل الدخول وخيارات الإعداد
يمكن أن تتضمّن تطبيقات الوسائط نشاطًا محسَّنًا للمركبة في "الإعدادات". يمكن استخدام هذا النشاط لتنفيذ مسارات المستخدمين التي لا تتناولها واجهات برمجة تطبيقات Android Media، على سبيل المثال:
- تسجيل الدخول
- تسجيل الخروج
- تبديل الحسابات
- الشاشة التي سجّل المستخدم الدخول إليها حاليًا (إن توفّرت)
- إعداد الخدمة
الشكل 3: مسار تسجيل الدخول
يعلن تطبيق الوسائط عن نشاط "الإعدادات" هذا باستخدام فلتر الأهداف التالي:
<activity android:name=".AppSettingsActivity" android:exported="true android:theme="@style/SettingsActivity" android:label="@string/app_settings_activity_title"> <intent-filter> <action android:name="android.intent.action.APPLICATION_PREFERENCES"/> </intent-filter> </activity>
يجب أن تطبِّق الوسائط المنطق التالي:
-
تأكَّد من أنّ تطبيق الوسائط المحدّد حاليًا يتضمّن نشاطًا يحتوي على Intent Filter المحدّد.
-
إذا كان الأمر كذلك، اسمح للمستخدم بالانتقال إلى النشاط.
-
إذا كانت قيود تجربة المستخدم في السيارة سارية (على سبيل المثال، السيارة تتحرك)، يجب إيقاف هذا الخيار لأنّ نشاط "الإعدادات" ليس واجهة مستخدم محسّنة للسائق.
معالجة الأخطاء وتسجيل الدخول المطلوب
تتفاعل الوسائط مع تطبيقات الوسائط من خلال واجهة برمجة التطبيقات Android Media Session API. كجزء من واجهة برمجة التطبيقات هذه، تتلقّى Media عنصرًا
PlaybackState
يُعلم بالحالة الحالية لتطبيق الوسائط.
تبدأ عملية تسجيل الدخول عندما يتغيّر رمز تطبيق الوسائط
PlaybackState
إلى
STATE_ERROR
،
بما في ذلك رمز خطأ محدّد (اطّلِع على التفاصيل أدناه). عند حدوث ذلك، يعرض تطبيق "الوسائط" وصف الخطأ وإمكانية التنقّل إلى نشاط تسجيل الدخول الذي ينفّذه تطبيق الوسائط.
يمكن للتطبيقات استخدام هذه العملية نفسها للإشارة إلى حالات الخطأ الأخرى (على سبيل المثال، خطأ في الاتصال بالخادم).
الشكل 4: معالجة الأخطاء
كجزء من معالجة أخطاء PlaybackState
العادية، يجب أن تتحقّق Media من الإدخال التالي.
-
رمز الخطأ
PlaybackState
يساويPlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED
. يشير ذلك إلى أنّ تطبيق الوسائط يتطلب تسجيل الدخول لمواصلة التشغيل. يمكن تلقّي رموز أخطاء أخرى، ما يشير إلى أنواع أخرى من حالات الخطأ. -
تحتوي رسالة الخطأ
PlaybackState
(التي تحدّدها تطبيقات الوسائط باستخدام الأسلوبPlaybackStateCompat.Builder#setErrorMessage
) على تفسير يسهل على المستخدم فهمه (على سبيل المثال، "لم تسجِّل الدخول"). يجب عرض هذه الرسالة على العميل ويجب أن تكون محسّنة للحدّ من تشتيت الانتباه (DO). -
يمكن أن يتضمّن
PlaybackState
اختياريًا الإضافات التالية (التي تحدّدها التطبيقات الوسائط باستخدام الطريقةPlaybackStateCompat.Builder#setExtras
) باستخدام المفاتيح التالية.-
android.media.extras.ERROR_RESOLUTION_ACTION_LABEL
. اضبطها على سلسلة تحتوي على الرسالة القابلة للقراءة من قِبل المستخدم والتي سيتم عرضها على الزر الذي ينقر عليه المستخدم لبدء عملية تسجيل الولوج. -
android.media.extras.ERROR_RESOLUTION_ACTION_INTENT
. اضبط الإجراء باستخدام علامةPendingIntent
ليتم تنفيذه عندما ينقر المستخدم على الزر المذكور أعلاه. يشير هذا الرمزPendingIntent
إلى نشاط تسجيل دخول مخصّص نفَّذه تطبيق الوسائط نفسه.
-
-
حالة
PlaybackState
تساويSTATE_ERROR
. يشير ذلك إلى أنّه لا يمكن تنفيذ أي عملية أخرى إلى أن تكتمل عملية تسجيل الدخول.