اجزای سیستم و جریان کاربر

اجزایی که با رسانه تعامل دارند در جدول شرح داده شده‌اند:

کامپوننت توضیحات
صفحه اصلی سطوح دیگری را در رابط کاربری خودرو نشان می‌دهد که رسانه در حال پخش را نمایش داده و کنترل می‌کنند. در AOSP، این صفحه اصلی است که هنگام شروع سیستم نمایش داده می‌شود. از این صفحه، کاربران می‌توانند جزئیات آیتم رسانه‌ای در حال پخش را مشاهده کرده و مجموعه‌ای محدود از اقدامات استاندارد و سفارشی (به عنوان مثال، پخش و مکث) را اجرا کنند.
رابط کاربری سیستم قابلیت‌هایی را ارائه می‌دهد که شامل گزینه‌های ناوبری رابط کاربری سراسری مانند پیمایش به رسانه است.
دستیاران اندروید سازوکارهایی را برای برنامه‌های دستیار صوتی مختلف فراهم می‌کند تا با سیستم تعامل داشته باشند. این برنامه‌ها می‌توانند در پس‌زمینه با منابع رسانه‌ای (Media Sources) تعامل داشته باشند (برای مثال، پخش یک آهنگ در نتیجه یک فرمان صوتی)، یا در پیش‌زمینه به رسانه (Media Source) هدایت شوند (برای مثال، وقتی به یک برنامه دستیار صوتی دستور داده می‌شود تا رابط کاربری یک منبع رسانه‌ای خاص را نمایش دهد).
لانچر برنامه همه برنامه‌های اندروید، از جمله منابع رسانه، در لانچر برنامه (App Launcher) شروع می‌شوند. رسانه می‌تواند انتخابگر منبع رسانه (Media Source) مخصوص به خود را ارائه دهد که مکمل یا جایگزین لانچر برنامه به عنوان نقطه شروع برای رسانه باشد.
فروشگاه گوگل پلی وقتی از GAS استفاده می‌شود، کاربران از طریق این بخش می‌توانند برنامه‌های جدید را در دستگاه اندروید خود پیدا کرده و نصب کنند. برای رسانه‌ها، پس از نصب برنامه‌ها، کاربران برای تکمیل فرآیند ورود یا شروع تعامل با برنامه به رسانه‌ها هدایت می‌شوند.
مدیر جلسه رسانه‌ای سرویس سیستم اندروید که جلسات رسانه‌ای را از همه منابع رسانه‌ای ردیابی و کنترل می‌کند. این سرویس مکانیزم‌هایی را برای تشخیص زمان تبدیل شدن یک منبع رسانه‌ای به منبع رسانه‌ای پیش‌زمینه فراهم می‌کند. رسانه و همه برنامه‌های دیگری که منبع رسانه‌ای در حال پخش فعلی (به عنوان مثال، صفحه اصلی) را نمایش می‌دهند، از Media Session Manager برای تشخیص این رویدادها و به‌روزرسانی رابط کاربری بر اساس آن استفاده می‌کنند. Media Sources از طریق Media Session API با Media Session Manager تعامل دارند.
رادیو برنامه تخصصی برای تعامل با سخت‌افزار رادیو. رادیو به جستجوی ایستگاه‌های رادیویی می‌پردازد، ایستگاه‌های اخیراً شناسایی‌شده را به سرعت انتخاب می‌کند و بین باندهای رادیویی جابه‌جا می‌شود. اجزای رابط کاربری مشترک بین رادیو و رسانه، کاربر را قادر می‌سازد تا بین این دو تجربه جابه‌جا شود.
موتور حواس‌پرتی راننده سرویس سیستم اندروید برای اعمال محدودیت‌های UX بر اساس وضعیت رانندگی خودرو استفاده می‌شود. برای ورود به سیستم و تنظیمات منابع رسانه‌ای (جایی که صفحه نمایش مستقیماً توسط منابع رسانه‌ای کنترل می‌شود)، این سرویس تضمین می‌کند که هیچ محتوای ناامنی هنگام رانندگی خودرو نمایش داده نشود. تولیدکنندگان اصلی تجهیزات (OEM) می‌توانند تعریف این وضعیت‌ها و نحوه واکنش سیستم در این موقعیت‌ها را سفارشی کنند (به عنوان مثال، با نمایش یک پوشش مسدودکننده روی صفحه نمایش).

جریان‌های کاربری

راه‌اندازی اپلیکیشن رسانه‌ای

رسانه باید با استفاده از CAR_INTENT_ACTION_MEDIA_TEMPLATE ضمنی زیر راه‌اندازی شود. این intent می‌تواند اطلاعات زیر را به عنوان موارد اضافی داشته باشد:

  • android.car.intent.extra.MEDIA_COMPONENT ( اختیاری ). رشته‌ی extra برای نمایش نام کامپوننت مسطح شده‌ی MediaBrowserService در برنامه‌ی رسانه‌ای که قرار است رسانه به آن متصل شود. در صورت عدم ارائه، رسانه، برنامه‌ی رسانه‌ای انتخاب شده‌ی فعلی را نمایش می‌دهد. این intent از نقاط ورودی زیر استفاده می‌شود:

    • رابط کاربری سیستم. برای بازگشت به تجربه رسانه یا شروع استفاده از آن برای اولین بار استفاده می‌شود. در این حالت، Intent فوق بدون هیچ گونه اضافی مورد استفاده قرار می‌گیرد تا باعث شود رسانه، برنامه رسانه‌ای انتخاب شده فعلی را نمایش دهد.

    • صفحه اصلی، دستیارها و مرکز اعلان‌ها. کاربران می‌توانند برای نمایش برنامه رسانه‌ای که در حال حاضر انتخاب شده است، به بخش رسانه بروند. در همه موارد، Intent ضمنی بدون موارد اضافی فعال می‌شود.

    • لانچر برنامه. وقتی کاربران یک برنامه رسانه‌ای را از لانچر برنامه انتخاب می‌کنند، intent فوق شامل CAR_EXTRA_MEDIA_COMPONENT اضافی می‌شود که شامل برنامه رسانه‌ای انتخاب شده است. رسانه این را به عنوان برنامه تازه انتخاب شده تعیین می‌کند و به آن متصل می‌شود. برای جزئیات بیشتر، به بخش زیر، ادغام لانچر برنامه با رسانه، مراجعه کنید.

ادغام لانچر برنامه با رسانه

برنامه‌های رسانه‌ای مجاز به ارائه هیچ فعالیتی که با دسته android.intent.category.LAUNCHER حاشیه‌نویسی شده باشد، نیستند. در نتیجه، لانچر برنامه (یا معادل آن) باید منطق ویژه‌ای را برای رسیدگی به ادغام منبع رسانه پیاده‌سازی کند:

  • لانچر برنامه باید سیستم را برای یافتن بسته‌هایی که MediaBrowserService.SERVICE_INTERFACE را پیاده‌سازی می‌کنند، اسکن کند. برای این بسته‌ها، لانچر برنامه، آیکون سرویس را مشابه آنچه برای دریافت سایر فعالیت‌ها استفاده می‌شود، دریافت می‌کند.

  • سپس App Launcher این بسته‌ها را با بسته‌هایی که فعالیت‌های android.intent.category.LAUNCHER را پیاده‌سازی می‌کنند، ترکیب می‌کند. اگر یک برنامه پیاده‌سازی MediaBrowserService و یک فعالیت launcher را ارائه دهد، سرویس اولویت دارد.

    در زمان نگارش این مطلب، هیچ برنامه‌ی منبع رسانه‌ای نمی‌تواند فعالیت لانچر را ارائه دهد.

  • نمونه‌ای از این منطق را می‌توان در کد AOSP در AppLauncherUtils#getAllLauncherApps() یافت.

جریان ورود و گزینه‌های پیکربندی

برنامه‌های رسانه‌ای می‌توانند شامل یک فعالیت تنظیمات بهینه‌شده برای خودرو باشند. چنین فعالیتی می‌تواند برای پیاده‌سازی جریان‌های کاربری که توسط APIهای رسانه‌ای اندروید مورد توجه قرار نمی‌گیرند، مورد استفاده قرار گیرد، به عنوان مثال:

  • ورود
  • خروج از سیستم
  • تغییر حساب کاربری
  • نمایش اینکه کاربر در حال حاضر به کدام حساب کاربری وارد شده است (در صورت وجود)
  • پیکربندی سرویس

این اکتیویتی تنظیمات توسط برنامه رسانه با فیلتر intent زیر اعلام شده است:

<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 داده‌شده باشد.

  • اگر چنین است، به کاربر اجازه دهید تا به فعالیت مورد نظر هدایت شود.

  • اگر محدودیت‌های تجربه کاربری خودرو (Car UX Restrictions) فعال باشد (مثلاً خودرو در حال حرکت باشد)، این قابلیت باید غیرفعال شود زیرا فعالیت تنظیمات (Settings) یک رابط کاربری بهینه‌شده برای راننده (Driver Optimized UI) نیست.

مدیریت خطا و ورود به سیستم الزامی

مدیا از طریق رابط برنامه‌نویسی کاربردی (API) جلسه رسانه اندروید (Android Media Session API) با برنامه‌های رسانه‌ای تعامل دارد. به عنوان بخشی از این رابط برنامه‌نویسی کاربردی (API)، مدیا یک شیء PlaybackState دریافت می‌کند که وضعیت فعلی برنامه رسانه‌ای را نشان می‌دهد.

فرآیند ورود به سیستم زمانی شروع می‌شود که برنامه‌ی رسانه، PlaybackState به STATE_ERROR تغییر دهد، که شامل یک کد خطای خاص است (جزئیات بیشتر را در زیر ببینید). وقتی این اتفاق می‌افتد، رسانه شرح خطا و امکانی را برای هدایت به فعالیت ورود به سیستم پیاده‌سازی شده توسط برنامه‌ی رسانه نمایش می‌دهد.

همین جریان می‌تواند توسط برنامه‌ها برای نشان دادن سایر موقعیت‌های خطا (مثلاً خطای اتصال به سرور) استفاده شود.

به عنوان بخشی از مدیریت خطای 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 است. این نشان می‌دهد که تا زمان تکمیل ورود به سیستم، هیچ عملیات دیگری امکان‌پذیر نیست.