مكونات النظام وتدفقات المستخدم

يوضح الرسم البياني التالي المكونات التي تتفاعل مع الوسائط:

مكونات النظام

الشكل 1. مكونات النظام

العناصر الموجودة في هذا الشكل موضحة في الجدول:

عنصر وصف
الشاشة الرئيسية يمثل الأسطح الأخرى في واجهة مستخدم السيارة التي تعرض الوسائط التي يتم تشغيلها حاليًا وتتحكم فيها. في AOSP، هذه هي الشاشة الرئيسية التي يتم عرضها عند بدء تشغيل النظام. من هذه الشاشة، يمكن للمستخدمين عرض تفاصيل عنصر الوسائط الذي يتم تشغيله وتنفيذ مجموعة محدودة من الإجراءات القياسية والمخصصة (على سبيل المثال، التشغيل والإيقاف المؤقت).
واجهة مستخدم النظام يوفر وظائف تتضمن خيارات التنقل العالمية لواجهة المستخدم، مثل الانتقال إلى الوسائط.
مساعدين يوفر Android آليات لتطبيقات المساعد الصوتي المختلفة للتفاعل مع النظام. يمكن أن تتفاعل هذه التطبيقات مع مصادر الوسائط في الخلفية (على سبيل المثال، تشغيل أغنية كنتيجة لأمر صوتي)، أو الانتقال إلى الوسائط في المقدمة (على سبيل المثال، عندما يتم توجيه تطبيق المساعد الصوتي لعرض واجهة المستخدم الخاصة مصدر إعلامي محدد).
مشغل التطبيقات تبدأ جميع تطبيقات Android في مشغل التطبيقات، بما في ذلك مصادر الوسائط. يمكن للوسائط تقديم محدد مصدر الوسائط الخاص بها، مما يكمل أو يحل محل مشغل التطبيقات كنقطة بداية للوسائط.
متجر جوجل بلاى عند استخدام GAS، هذا هو المكان الذي يحدد فيه المستخدمون التطبيقات الجديدة ويقومون بتثبيتها على جهاز Android. بالنسبة للوسائط، بمجرد تثبيت التطبيقات، يتم توجيه المستخدمين إلى الوسائط لإكمال عملية تسجيل الدخول أو لبدء التفاعل مع التطبيق.
مدير الجلسة الإعلامية خدمة نظام أندرويد تقوم بتتبع جلسات الوسائط والتحكم فيها من جميع مصادر الوسائط. يوفر آليات لاكتشاف متى يصبح مصدر الوسائط هو مصدر الوسائط الأمامية . تستخدم الوسائط وجميع التطبيقات الأخرى التي تعرض مصدر الوسائط قيد التشغيل حاليًا (على سبيل المثال، الشاشة الرئيسية)، مدير جلسة الوسائط لاكتشاف هذه الأحداث وتحديث واجهة المستخدم وفقًا لذلك. تتفاعل مصادر الوسائط مع Media Session Manager عن طريق Media Session API .
مذياع تطبيق متخصص للتفاعل مع أجهزة الراديو. يبحث الراديو عن محطات الراديو، ويختار بسرعة المحطات التي تم تحديدها مؤخرًا والتبديل بين نطاقات الراديو. تتيح مكونات واجهة المستخدم المشتركة بين كل من الراديو والوسائط للمستخدم التبديل بين التجربتين.
محرك إلهاء السائق تُستخدم خدمة نظام Android لفرض قيود تجربة المستخدم بناءً على حالة قيادة السيارة. بالنسبة لتسجيل الدخول إلى مصادر الوسائط وإعدادات UX (حيث يتم التحكم في الشاشة مباشرةً بواسطة مصادر الوسائط)، تضمن هذه الخدمة عدم عرض أي محتوى غير آمن عندما تكون السيارة في حالة القيادة. يمكن لمصنعي المعدات الأصلية تخصيص تعريف هذه الحالات وكيفية تفاعل النظام في هذه المواقف (على سبيل المثال، من خلال عرض تراكب شاشة الحظر).

تدفقات المستخدم

إطلاق تطبيق الوسائط

تظهر العملية التي تقوم بتشغيل الوسائط أدناه.

إطلاق تطبيق الوسائط

الشكل 2. إطلاق تطبيق الوسائط

يجب تشغيل الوسائط باستخدام CAR_INTENT_ACTION_MEDIA_TEMPLATE الضمني التالي. يمكن أن تحتوي هذه النية على المعلومات التالية كإضافات :

  • android.car.intent.extra.MEDIA_COMPONENT ( اختياري ). سلسلة إضافية لتمثيل اسم المكون المسطح لخدمة MediaBrowserService في تطبيق الوسائط الذي سيتم توصيل الوسائط به. إذا لم يتم توفيره، يعرض الوسائط تطبيق الوسائط المحدد حاليًا. يتم استخدام هذه النية من نقاط الدخول التالية:

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

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

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

مشغل التطبيقات لتكامل الوسائط

لا يُسمح لتطبيقات الوسائط بتقديم أي نشاط موضح به فئة android.intent.category.LAUNCHER . ونتيجة لذلك، يجب على مشغل التطبيقات (أو ما يعادله) تنفيذ منطق خاص لمعالجة تكامل مصدر الوسائط:

  • يجب أن يقوم App Launcher بفحص النظام بحثًا عن الحزم التي تنفذ MediaBrowserService.SERVICE_INTERFACE . بالنسبة لهذه الحزم، يقوم App Launcher بجلب أيقونة الخدمة المشابهة لتلك المستخدمة لجلب الأنشطة الأخرى.

  • يقوم App Launcher بعد ذلك بدمج هذه الحزم مع تلك التي تنفذ أنشطة android.intent.category.LAUNCHER . إذا كان التطبيق يوفر تطبيق MediaBrowserService ونشاط المشغل، فستكون للخدمة الأولوية.

    حتى كتابة هذه السطور، لا يمكن لأي تطبيق مصدر للوسائط توفير نشاط الإطلاق.

  • يمكن العثور على مثال لهذا المنطق في كود AOSP في AppLauncherUtils#getAllLauncherApps() .

تدفق تسجيل الدخول وخيارات التكوين

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

  • تسجيل الدخول
  • خروج
  • تبديل الحساب
  • عرض المكان الذي قام المستخدم بتسجيل الدخول إليه حاليًا (إن وجد)
  • تكوين الخدمة

تدفق تسجيل الدخول

الشكل 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>

يجب على وسائل الإعلام تنفيذ المنطق التالي:

  • تأكد من أن تطبيق الوسائط المحدد حاليًا يتضمن نشاطًا باستخدام مرشح الأغراض المحدد.

  • إذا كان الأمر كذلك، فاسمح للمستخدم بالانتقال إلى النشاط.

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

معالجة الأخطاء وتسجيل الدخول المطلوب

تتفاعل الوسائط مع تطبيقات الوسائط من خلال Android Media Session API. كجزء من واجهة برمجة التطبيقات هذه، تتلقى الوسائط كائن PlaybackState ، الذي ينقل الحالة الحالية لتطبيق الوسائط.

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

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

معالجة الأخطاء

الشكل 4. معالجة الأخطاء

كجزء من معالجة أخطاء PlaybackState العادية، يجب على الوسائط التحقق من الإدخال التالي.

  • رمز خطأ 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 . يشير هذا إلى عدم إمكانية إجراء أي عملية أخرى حتى اكتمال تسجيل الدخول.