گسترش دادن برنامه رسانه به «Android برای ماشین‌ها»

برنامه‌تان را به خودروهایی که Android Auto یا «سیستم عامل Android Automotive» دارند بیاورید. از معماری برنامه‌ای استفاده کنید که برای هر دو مورد کار کند تا همه کاربران بتوانند از برنامه‌تان لذت ببرند.

‫Android for Cars چیست؟

برنامه رسانه برای خودروها می‌تواند روشی برای کاربران فراهم کند تا زندگی دیجیتال خود را به‌طور یکپارچه به خودروهایشان متصل کنند. با گسترش دادن همان برنامه‌های تلفن برای دردسترس قرار گرفتن در خودروها، تجربه کاربری بهتری ایجاد می‌کنید. می‌توانید این کار را با ادغام کردن با Android Auto یا «سیستم عامل Android Automotive» انجام دهید.

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

Android Auto

Android Auto تجربه برنامه‌ای بهینه‌سازی‌شده برای راننده را برای کاربرانی که تلفن Android با برنامه Android Auto و خودرو یا سیستم استریو سازگار دارند فراهم می‌کند. آن‌ها می‌توانند با متصل کردن تلفنشان، مستقیماً از برنامه شما در نمایشگر خودرو استفاده کنند. با ایجاد سرویس‌هایی که Android Auto برای نمایش میانای بهینه‌سازی‌شده برای راننده استفاده می‌کند، به Android Auto اجازه می‌دهید به برنامه تلفن شما متصل شود.

سیستم عامل Android Automotive

سیستم عامل Android Automotive یک سیستم اطلاعات-سرگرمی مبتنی بر Android است که در خودروها تعبیه شده است. سیستم خودرو دستگاهی مستقل با سیستم‌عامل Android است که برای رانندگی بهینه‌سازی شده است. با سیستم عامل Android Automotive، کاربران برنامه شما را مستقیماً در خودرو نصب می‌کنند نه در تلفنشان.

دسته‌های برنامه پشتیبانی‌شده

برنامه‌های رسانه به کاربران امکان می‌دهند موسیقی، رادیو، کتاب‌های صوتی، و دیگر محتواهای صوتی را در خودرو مرور و پخش کنند. برای اطلاعات بیشتر، ساخت برنامه‌های بازپخش صدا برای خودروها و ساخت برنامه‌های رسانه برای خودروها را ببینید.

برنامه‌های رسانه بااستفاده از MediaLibraryService و MediaSession ساخته شده‌اند. در سیستم‌عامل Android Automotive، می‌توانید بااستفاده از Views یا Compose صفحه‌های ورود به سیستم و تنظیمات (برای استفاده درحین پارک) نیز بسازید.

برنامه‌های ویدیویی به کاربران امکان می‌دهند وقتی خودرو پارک است ویدیوهای جاری‌سازی را مشاهده کنند. هدف اصلی این برنامه‌ها نمایش ویدیوهای جاری‌سازی است. این برنامه‌ها بااستفاده از Views یا Compose ساخته شده‌اند. برای اطلاعات بیشتر، برنامه‌های ساخت ویدیو ویژه سیستم‌عامل Android Automotive و برنامه‌های ساخت ویدیو ویژه سیستم‌عامل Android Automotive را ببینید.

ساختن برنامه‌های بازپخش صدا برای خودروها

این راهنما فرض می‌کند که ازقبل برنامه بازپخش رسانه پایه دارید. اگر این کار را نکرده‌اید، برای شروع، به ایجاد برنامه پخش‌کننده رسانه پایه بروید.

این راهنما اطلاعاتی درباره کارهایی که باید انجام دهید، ازجمله پیوندهایی به منابع بیشتر با راهنمایی‌های خاص، دراختیارتان قرار می‌دهد.

عناصر بازپخش

‫Media3 چندین مؤلفه کلیدی برای موارد استفاده بازپخش ارائه می‌دهد. اگر با کتابخانه‌های رسانه‌ای قبلی Android کار کرده باشید، کلاس‌هایی که این مؤلفه‌ها را تشکیل می‌دهند برایتان آشنا هستند.

نمودار زیر نشان می‌دهد که چگونه این مؤلفه‌ها در یک برنامه معمولی کنار هم قرار می‌گیرند.

مؤلفه‌های مختلف برنامه رسانه‌ای که از Media3 استفاده می‌کند، به‌دلیل اشتراک‌گذاری میاناها و کلاس‌ها، به چند روش ساده به یکدیگر متصل می‌شوند.
شکل ۱: مؤلفه‌های برنامه رسانه

برای اطلاعات بیشتر، مؤلفه‌های بازپخش را ببینید.

پیاده‌سازی MediaLibraryService و MediaLibrarySession

MediaLibraryService میانای برنامه‌سازی کاربردی استانداردی را برای ارائه و اجازه دسترسی به کتابخانه رسانه‌ای شما فراهم می‌کند. این کار هنگام افزودن پشتیبانی از Android Auto یا سیستم‌عامل Android Automotive به برنامه رسانه شما الزامی است، زیرا این پلاتفرم‌ها واسط کاربر ایمن برای راننده خود را برای کتابخانه رسانه شما ارائه می‌دهند. برای اطلاعات بیشتر درباره پیاده‌سازی و استفاده از MediaLibraryService، به ارائه محتوا با MediaLibraryService مراجعه کنید.

برای کنترل‌های بازپخش، از جلسه رسانه استفاده کنید. ‫MediaSession API روشی جهانی برای تعامل با پخش‌کننده صوتی یا ویدیویی ارائه می‌دهد. کتابخانه Jetpack Media3 شامل MediaLibrarySession است که MediaSession را برای افزودن میاناهای برنامه‌سازی کاربردی مرور محتوا گسترش می‌دهد.

اتصال جلسه رسانه به پخش‌کننده به برنامه اجازه می‌دهد بازپخش رسانه را به‌صورت خارجی تبلیغ کند و فرمان‌های بازپخش را از منابع خارجی مثل Android Auto، سیستم‌عامل Android Automotive، یا «دستیار Google» دریافت کند. برای اطلاعات بیشتر، کنترل و تبلیغ بازپخش بااستفاده از MediaSession و استفاده از MediaLibrarySession را ببینید.

جلسه رسانه شما باید حداقل از فرمان‌های پخش‌کننده زیر پشتیبانی کند:

راهنمای فعال کردن کنترل‌های بازپخش روش‌های سفارشی‌سازی کنترل‌های بازپخش در خودرو را شرح می‌دهد.

وقتی Android Auto یا «سیستم عامل Android Automotive» به برنامه شما متصل می‌شوند، درخواست می‌کنند کتابخانه محتوایی برای نمایش داده شود، که این کار باعث راه‌اندازی روش فراخوانی برگشتی onGetLibraryRoot() می‌شود. می‌توانید به‌سرعت فایل رسانه‌ای ریشه‌ای را برگردانید تا دسترسی به کتابخانه‌تان مجاز شود. وقتی Android Auto یا سیستم‌عامل Android Automotive سعی می‌کنند سطوح عمیق‌تری از کتابخانه محتوای شما را مرور کنند، روش فراخوانی برگشتی onGetChildren() فراخوانده می‌شود.

این پلاتفرم‌ها محدودیت‌های بیشتری را بر نحوه ساختاردهی کتابخانه محتوای شما اعمال می‌کنند. برای جزئیات درباره سفارشی‌سازی نحوه نمایش کتابخانه محتوا، راهنمای ایجاد سرویس مرورگر رسانه را ببینید.

اعلام پشتیبانی از Android Auto

از ورودی مانیفست زیر برای اعلام اینکه برنامه تلفنتان از Android Auto پشتیبانی می‌کند استفاده کنید:

<application>
    ...
    <meta-data android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

این ورودی مانیفست به فایل XML اشاره می‌کند که اعلام می‌کند برنامه‌تان از چه قابلیت‌های خودرویی پشتیبانی می‌کند. برای نشان دادن اینکه برنامه رسانه دارید، فایل XML با نام automotive_app_desc.xml را به دایرکتوری res/xml/ در پروژه‌تان اضافه کنید. این فایل باید حاوی محتوای زیر باشد:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

اعلام پشتیبانی از «سیستم عامل Android Automotive»

باید ماژول خودرویی ایجاد کنید زیرا همه منطق برنامه شما نمی‌تواند با برنامه خودرویی هم‌رسانی شود. برخی‌از مؤلفه‌های سیستم‌عامل Android Automotive، مانند مانیفست، الزامات خاص پلاتفرم دارند. واحدی ایجاد کنید که بتواند کد این مؤلفه‌ها را جدا از کدهای دیگر در پروژه‌تان نگه دارد، مثل کدی که برای برنامه تلفن همراهتان استفاده می‌شود.

برای افزودن ماژول خودرویی به پروژه، این مراحل را دنبال کنید:

  1. در «استودیو Android»، روی فایل > جدید > واحد جدید کلیک کنید.
  2. Automotive Module (ماژول خودرویی) را انتخاب کنید، سپس روی Next (بعدی) کلیک کنید.
  3. نام برنامه/کتابخانه را وارد کنید. این نامی است که کاربران برای برنامه شما در سیستم عامل Android Automotive می‌بینند.
  4. نام واحد را وارد کنید.
  5. نام بسته را طوری تنظیم کنید که با برنامه‌تان مطابقت داشته باشد.
  6. API 28: Android 9.0 (Pie)‎ را برای Minimum SDK انتخاب کنید، سپس روی Next کلیک کنید.

    همه خودروهایی که از «سیستم عامل Android Automotive» پشتیبانی می‌کنند، Android 9 (سطح میانای برنامه‌سازی کاربردی ۲۸) یا بالاتر را اجرا می‌کنند، بنابراین انتخاب این مقدار همه خودروهای سازگار را هدف‌یابی می‌کند.

  7. بدون فعالیت را انتخاب کنید و سپس روی پایان کلیک کنید.

پس‌از ایجاد ماژول در Android Studio،‏ AndroidManifest.xml را در ماژول خودرویی جدیدتان باز کنید:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

عنصر application دارای برخی اطلاعات استاندارد برنامه و همچنین عنصر uses-feature است که پشتیبانی از سیستم عامل Android Automotive را اعلام می‌کند. توجه داشته باشید که هیچ فعالیتی در مانیفست اعلام نشده است.

اگر تنظیمات یا فعالیت‌های ورود به سیستم را پیاده‌سازی می‌کنید، آن‌ها را اینجا اضافه کنید. این فعالیت‌ها توسط سیستم بااستفاده از هدف‌های صریح راه‌اندازی می‌شوند و تنها فعالیت‌هایی هستند که در مانیفست برای برنامه سیستم‌عامل Android Automotive خود اعلام می‌کنید.

پس‌از افزودن هرگونه تنظیمات یا فعالیت‌های ورود به سیستم، فایل مانیفست خود را با تنظیم مشخصه android:appCategory="audio" در عنصر application و افزودن عناصر uses-feature زیر تکمیل کنید:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:appCategory="audio"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

</manifest>

تنظیم صریح این ویژگی‌ها روی required="false" تضمین می‌کند که برنامه‌تان با ویژگی‌های سخت‌افزاری موجود در دستگاه‌های Automotive OS تداخل نداشته باشد.

از ورودی مانیفست زیر برای اعلام اینکه برنامه‌تان از «سیستم عامل Android Automotive» پشتیبانی می‌کند استفاده کنید:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

این ورودی مانیفست به فایل XML اشاره دارد که قابلیت‌های خودرویی را که برنامه‌تان پشتیبانی می‌کند تعریف می‌کند.

برای نشان دادن اینکه برنامه رسانه دارید، فایل XML با نام automotive_app_desc.xml را به دایرکتوری res/xml/ در پروژه‌تان اضافه کنید. محتوای زیر را در این فایل بگنجانید:

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

فیلترهای قصد

سیستم عامل Android Automotive از قصد صریح برای راه‌اندازی فعالیت‌ها در برنامه رسانه شما استفاده می‌کند. هیچ فعالیتی را که فیلتر قصد CATEGORY_LAUNCHER یا ACTION_MAIN دارد در فایل مانیفست قرار ندهید.

فعالیت‌هایی مانند آنچه در مثال زیر آمده است معمولاً تلفن یا برخی دستگاه‌های همراه دیگر را هدف قرار می‌دهند. این فعالیت‌ها را در ماژولی که برنامه تلفن را می‌سازد تعریف کنید، نه در ماژولی که برنامه «سیستم عامل Android Automotive» شما را می‌سازد.

<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>

مراحل بعدی

اکنون که برنامه‌ای برای Android Auto و «سیستم‌عامل Android Automotive» دارید، ممکن است بخواهید مراحل بیشتری را برای بهینه‌سازی برنامه‌تان انجام دهید تا استفاده از آن درحین رانندگی ایمن‌تر شود. برای توصیه‌های بیشتر جهت کمک به تضمین تجربه کاربری ایمن و راحت، راهنماهای فنی مربوط به کنش‌های گفتاری، محافظت‌های حواس‌پرتی، و مدیریت خطا را ببینید.

ساختن برنامه‌های بازپخش ویدیو برای سیستم‌عامل Android Automotive

چون برنامه‌های ویدیویی در خودروها جدا از برنامه‌های رسانه‌ای دسته‌بندی می‌شوند، باید از برخی الزامات خاص برای برنامه‌های ویدیویی آگاه باشید، همان‌طور که در ساختن برنامه‌های پارک‌شده برای خودروها و ساختن برنامه‌های ویدیویی برای سیستم‌عامل Android Automotive شرح داده شده است. این دستورالعمل‌ها را دنبال کنید:

علامت‌گذاری برنامه به‌عنوان برنامه ویدیویی

برای نشان دادن اینکه برنامه‌تان از ویدیو پشتیبانی می‌کند، مشخصه android:appCategory="video" را به عنصر <application> مانیفست خود اضافه کنید.

<manifest ...>
    ...
    <application
      ...
      android:appCategory="video">
        ...
    </application>
</manifest>

اعلام ویژگی سخت‌افزاری «سیستم عامل Android Automotive»

برای اعلام اینکه برنامه‌تان از دستگاه‌های «سیستم‌عامل Android Automotive» پشتیبانی می‌کند، عنصر android.hardware.type.automotive <uses-feature> را به مانیفست خود اضافه کنید. برای راهنمایی درباره اینکه آیا مشخصه android:required را روی "false" یا "true" تنظیم کنید، به اعلام ویژگی سخت‌افزاری سیستم‌عامل Android Automotive مراجعه کنید.

<manifest ...>
  ...
  <uses-feature android:name="android.hardware.type.automotive" ...>
  ...
</manifest>