سیستم عامل Android Automotive علاوه بر پشتیبانی از برنامههایی که برای استفاده در حین رانندگی ساخته شدهاند، از مرورگرها ، بازیها و برنامههای ویدیویی برای استفاده در حالت پارک پشتیبانی میکند. میتوانید همان برنامهای را که برای سایر دستگاههای صفحهنمایش بزرگ انجام میدهید، تنها با چند تغییر جزئی، برای خودروها ارسال کنید.
برنامه های پارک شده برای سیستم عامل Android Automotive بسازید
برای شروع ساخت برنامه خود برای سیستم عامل Android Automotive، ابتدا برنامه موجود خود را در شبیه ساز سیستم عامل Android Automotive تست کنید. برای راهاندازی شبیهساز، مراحل تست را با استفاده از شبیهساز سیستمعامل Android Automotive دنبال کنید. سپس میتوانید با دنبال کردن دستورالعملهای Run your app در شبیهساز، برنامه را اجرا کنید.
هنگام اجرای برنامه خود، مراقب مشکلات سازگاری، مانند موارد زیر باشید:
- صفحه نمایش های اطلاعات سرگرمی دارای جهت گیری ثابت هستند. برای رعایت دستورالعملهای کیفیت برنامه خودرو ، برنامهها باید هم جهتهای عمودی و هم جهت افقی را پشتیبانی کنند.
- API های موجود در دستگاه های دیگر ممکن است در سیستم عامل Android Automotive در دسترس نباشند. به عنوان مثال، برخی از APIهای خدمات Google Play در سیستم عامل Android Automotive در دسترس نیستند. برای جزئیات در مورد نحوه رسیدگی به این مشکلات، بخش غیرفعال کردن ویژگیها را ببینید.
برای هدف قرار دادن سیستم عامل Android Automotive، برنامه شما باید ورودی های مانیفست خاصی داشته باشد. با آنها، برنامههایی که سیستم عامل Android Automotive را هدف قرار میدهند با استفاده از نوع انتشار سیستمعامل Automotive جداگانه به فروشگاه Play ارسال میشوند. آنها تحت یک فرآیند بازبینی دستی قرار می گیرند تا اطمینان حاصل شود که برای استفاده در خودرو ایمن هستند. برای جزئیات بیشتر به توزیع برنامههای Android برای اتومبیلها مراجعه کنید.
برنامههایی که برای سیستمعامل Android Automotive ساخته شدهاند، برای اینکه در فروشگاه Play در خودرو فهرست شوند، باید عنصر <uses-feature>
زیر را در فایل AndroidManifest.xml
داشته باشند:
<manifest ...>
...
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
...
</manifest>
برنامههای ارسالشده به مسیرهای غیرخودرویی نمیتوانند عنصر <uses-feature>
نشاندادهشده در نمونه کد قبلی را اعلام کنند، زیرا نمیتوانند به سختافزار خاص خودرو وابسته باشند. بنابراین، برای ارسال یک برنامه برای دستگاههای خودرویی و غیرخودرویی، باید حداقل دو نوع از برنامه خود را تولید کنید: یکی برای دستگاههای خودرو و دیگری برای دستگاههای تلفن همراه. برای اطلاعات بیشتر در مورد نحوه ایجاد این طعم های جداگانه، به مستندات زیر مراجعه کنید:
دو نوع برنامه می توانند نام بسته یکسانی داشته باشند، اما باید کدهای نسخه متفاوتی داشته باشند زیرا به طور جداگانه در تراک های فروشگاه Play آپلود می شوند.
از طرف دیگر، بهجای استفاده از طعمهای جداگانه، میتوانید از نامهای بسته جداگانه برای فایلهای APK یا App Bundle تلفن همراه و خودرو خود استفاده کنید. برای درک مبادلات هر رویکرد، به نام بسته در راهنمای توسعه برنامه رسانه مراجعه کنید.
علاوه بر عنصر نشان داده شده در نمونه کد قبلی، برنامه های ساخته شده برای سیستم عامل Android Automotive باید عناصر <uses-feature>
زیر را در عنصر ریشه <manifest>
داشته باشند:
<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"/>
تنظیم صریح این ویژگیها روی غیرضروری کمک میکند تا اطمینان حاصل شود که برنامه شما با ویژگیهای سختافزاری موجود در دستگاههای سیستمعامل Android Automotive تداخل ندارد .
برای اطمینان از اینکه برنامه شما فقط برای استفاده در حالت پارک در دسترس است، عنصر <meta-data>
زیر را در هیچ عنصر <activity>
در مانیفست خود وارد نکنید :
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
بدون این ابرداده، هنگامی که خودرو وارد حالت رانندگی می شود، فعالیت های برنامه شما به طور خودکار توسط سیستم عامل مسدود می شود تا حواس پرتی برای راننده کاهش یابد. این به عنوان یک تماس چرخه حیات onPause
اتفاق میافتد، که در طی آن باید پخش ویدیو و صدا را از برنامه خود متوقف کنید.
علاوه بر الزامات قبلی، که برای همه برنامههای پارک شده اعمال میشود، دستههای ویدیویی و بازیها دارای شرایط اضافی هستند:
- برای برنامههای ویدیویی، به علامتگذاری برنامه بهعنوان یک برنامه ویدیویی مراجعه کنید.
- برای بازیها، برنامه خود را بهعنوان یک بازی علامتگذاری کنید .
برای ارائه بهترین تجربه ممکن به کاربران خود، هنگام ساخت برنامه خود برای سیستم عامل Android Automotive موارد زیر را در نظر داشته باشید.
صفحهنمایشهای موجود در خودروهای Android Automotive OS از نظر اندازه، وضوح و نسبت ابعاد بیشتر به تبلتها و تاشوها شباهت دارند تا گوشیها. به این ترتیب، بهینه سازی برنامه شما برای صفحه نمایش های بزرگ به نفع کاربران شما در اتومبیل نیز می باشد.
به ویژه، برای جزئیات بیشتر در مورد استفاده از اندازه های بزرگ نمایشگر، و همچنین رسانه ها و گالری های بازی برای الهام بخشیدن به طراحی و راهنمایی، به راهنمای پشتیبانی از اندازه های مختلف صفحه و انتقال رابط کاربری خود به راهنماهای طرح بندی پاسخگو مراجعه کنید.
سایر بهینه سازی های صفحه نمایش بزرگ مانند سازگاری ورودی به طور مستقیم برای سیستم عامل Android Automotive سودمند نیستند، اما همچنان می توانند تجربه کاربر را بهبود بخشند. به عنوان مثال، ناوبری صفحه کلید از همان APIهایی استفاده می کند که ناوبری چرخشی است ، بنابراین هر بهینه سازی انجام شده در آنجا می تواند برای هر دو عامل مفید باشد.
همانند سایر عوامل شکل، سیستم عامل Android Automotive شامل عناصر رابط کاربری سیستم، مانند نوارهای وضعیت و ناوبری، و پشتیبانی از نمایشگرهای غیر مستطیلی است.
بهطور پیشفرض، برنامهها در ناحیهای طراحی میشوند که با نوارهای سیستم یا برشهای نمایشگر همپوشانی ندارد. با این حال، ممکن است بخواهید برنامه شما نوارهای سیستم را پنهان کند، محتوا را در پشت آنها بکشد، یا محتوا را در یک بریدگی نمایشگر نشان دهد، همانطور که در Lay out your app into windows insets توضیح داده شده است. اگر برنامه شما هر یک از اینها را انجام می دهد، برای جزئیات در مورد نحوه کارکرد خوب برنامه خود در اکوسیستم دستگاه های Android Automotive OS به زیربخش های زیر مراجعه کنید.
میلههای سیستم در خودروها ممکن است اندازه و موقعیت متفاوتی نسبت به سایر فاکتورها داشته باشند. به عنوان مثال، نوارهای پیمایش ممکن است در سمت چپ، راست یا پایین صفحه قرار گیرند. حتی در صورتی که یک نوار وضعیت در بالا و یک نوار ناوبری در پایین وجود داشته باشد (همانطور که در مورد اکثر تلفن ها و تبلت ها وجود دارد)، اندازه این عناصر احتمالاً در اتومبیل ها بسیار بیشتر خواهد بود.
علاوه بر این، سیستم عامل Android Automotive به OEM ها اجازه می دهد تا کنترل کنند که آیا برنامه ها می توانند نوارهای سیستم را برای ورود و خروج از حالت غوطه ور نمایش یا پنهان کنند یا خیر. به عنوان مثال، با جلوگیری از پنهان کردن نوارهای سیستم توسط برنامهها، OEMها میتوانند اطمینان حاصل کنند که کنترلهای خودرو، مانند کنترلهای آب و هوا، همیشه روی صفحه قابل دسترسی هستند. اگر یک OEM از کنترل نوارهای سیستم توسط برنامهها جلوگیری کرده باشد، وقتی برنامهای با APIهای WindowInsetsController
(یا WindowInsetsControllerCompat
) برای نمایش یا پنهان کردن نوارهای سیستم تماس میگیرد، هیچ اتفاقی نمیافتد. برای کسب اطلاعات بیشتر در مورد نحوه تشخیص اینکه آیا برنامه شما قادر به تغییر inset ها بوده است، به مستندات show
و hide
مراجعه کنید.
به همین ترتیب، OEM ها همچنین می توانند کنترل کنند که آیا برنامه ها می توانند رنگ و شفافیت نوارهای سیستم را تنظیم کنند یا نه تا اطمینان حاصل کنند که نوارها و عناصر موجود در آنها همیشه به وضوح قابل مشاهده هستند. اگر برنامه شما لبه به لبه میکشد، بررسی کنید که فقط محتوای غیر مهم پشت میلههای سیستم کشیده شود. اگر OEM دستگاه از تنظیم رنگ یا شفافیت نوارها جلوگیری کند، ممکن است این محتوا قابل مشاهده نباشد.
<!-- Depending on OEM configuration, these style declarations
(and the corresponding runtime calls) may be ignored -->
<style name="...">
<item name="android:statusBarColor">...</item>
<item name="android:navigationBarColor">...</item>
<item name="android:windowTranslucentStatus">...</item>
<item name="android:windowTranslucentNavigation">...</status>
</style>
اگر برنامه شما لبه به لبه می شود، در مورد اندازه، تعداد، نوع یا مکان نوارهای سیستم فرضیات خود را انجام ندهید. درعوض، از APIهای ورودی پنجره برای چیدمان محتوای برنامه خود نسبت به نوارهای سیستم استفاده کنید. برای جزئیات بیشتر در مورد نحوه استفاده از این APIها، به نمایش محتوای لبه به لبه در برنامه خود مراجعه کنید. مقادیر بالشتک کدگذاریشده سخت که اگرچه هرگز توصیه نمیشود، ممکن است محتوا را در قسمت امن در سایر دستگاهها نگه دارد، احتمالاً در اتومبیلها چنین نخواهد بود.
علاوه بر نمایشگرهای مستطیلی، برخی از وسایل نقلیه ممکن است دارای صفحه نمایش نامنظم باشند، مانند شکل 1 :
اگر برنامه شما لبه به لبه رندر نمیشود، لازم نیست کاری انجام دهید تا در منطقه امن رندر شود.
اگر برنامه شما لبه به لبه رندر میشود، میتوانید انتخاب کنید که میخواهید با توجه به برشهای نمایشگر چگونه رفتار کند. شما می توانید این کار را با استفاده از منابع با تنظیم ویژگی android:windowLayoutInDisplayCutoutMode
برای موضوع برنامه خود یا در زمان اجرا با تغییر ویژگی layoutInDisplayCutoutMode
پنجره انجام دهید.
از آنجایی که انواع بریدگیهای نمایشگر موجود در دستگاههای دارای سیستم عامل Android Automotive با دستگاههای تلفن همراه متفاوت است، از LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
یا LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
که رفتاری برای برشهای موجود در دستگاههای تلفن همراه بهینهسازی شدهاند، استفاده نکنید. در عوض، از LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
یا LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
استفاده کنید تا همیشه از بریدگی اجتناب کنید یا همیشه وارد آن شوید. هنگام انتخاب دومی، برای جزئیات بیشتر در مورد API های مربوط به برش های نمایشگر، به پشتیبانی از برش های نمایشگر مراجعه کنید.
اگر برنامه شما در ناحیه برش نمایشگر رندر میشود و میخواهید رفتار متفاوتی بین سیستمعامل Android Automotive و تلفن همراه داشته باشید، اگر برنامه شما این رفتار را در زمان اجرا تنظیم میکند، به غیرفعال کردن ویژگیها برای راهنمایی مراجعه کنید و اگر برنامه شما این رفتار را با استفاده از منبع تنظیم کرد، از منابع جایگزین استفاده کنید. فایل ها
اگر یک برنامه تلفن همراه موجود را در سیستم عامل Android Automotive در دسترس قرار می دهید، برخی از ویژگی ها و عملکرد ممکن است مرتبط یا در دسترس نباشند. به عنوان مثال، خودروها عموماً امکان دسترسی به دوربین را ندارند. علاوه بر این، تنها زیر مجموعه ای از خدمات Google Play در سیستم عامل Android Automotive در دسترس است. برای جزئیات بیشتر به خدمات Google Play برای اتومبیل ها مراجعه کنید.
میتوانید از PackageManager.hasSystemFeature
API استفاده کنید تا با بررسی ویژگی FEATURE_AUTOMOTIVE
، تشخیص دهید که آیا برنامه روی سیستمعامل Android Automotive اجرا میشود، همانطور که در مثال زیر نشان داده شده است:
val packageManager: PackageManager = ... // Get a PackageManager from a Context val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
PackageManager packageManager = ... // Get a PackageManager from a Context boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
از طرف دیگر، اگر برنامه شما یک جزء Android Auto نیز دارد، میتوانید از CarConnection API از کتابخانه برنامه Android for Cars استفاده کنید تا تشخیص دهید که آیا برنامه روی سیستمعامل Android Automotive یا Android Auto اجرا میشود یا اینکه به ماشین متصل نیست. همه
برای Picture-in-Picture (PiP)، بهترین شیوه های تعیین شده را دنبال کنید تا بررسی کنید که آیا این ویژگی در دسترس است یا خیر و واکنش مناسب نشان دهید.
در حالی که اتومبیلها به طور فزایندهای به اینترنت متصل میشوند، برنامهها توصیه میشوند که بدون اتصال به اینترنت کار کنند، مانند موارد زیر:
- کاربران ممکن است از داده تلفن همراه ارائه شده به عنوان بخشی از یک بسته اشتراک از سازنده خودرو انصراف دهند.
- دسترسی به داده های تلفن همراه ممکن است در مناطق خاصی محدود باشد.
- خودروهای دارای رادیو Wi-Fi ممکن است خارج از محدوده Wi-Fi باشند یا یک OEM ممکن است Wi-Fi را به نفع یک شبکه تلفن همراه خاموش کند.
برای مقابله با این سناریوها در برنامه خود با تضعیف عملکردی که به دسترسی به اینترنت بستگی دارد، مانند ارائه محتوای آفلاین، آماده باشید. برای اطلاعات بیشتر، بهترین روشها برای بهینهسازی شبکه را ببینید.
برای کمک به انطباق برنامه خود با خودروها، میتوانید از واجد شرایط منبع car
برای ارائه منابع جایگزین هنگام اجرای خودرو با سیستم عامل Android Automotive استفاده کنید. برای مثال، اگر از منابع Dimension برای ذخیره مقادیر padding استفاده میکنید، میتوانید از مقدار بزرگتری برای مجموعه منابع car
استفاده کنید تا اهداف لمسی بزرگتر شوند.
پس از اینکه برنامه خود را بر اساس دستورالعملهای کیفیت برنامه ماشین برای دستهاش آزمایش کردید و یک سیستم عامل Android Automotive با هر گونه تغییر لازم برای دستهاش ایجاد کردید، سپس میتوانید آن را در مسیرهای فاکتور فرم سیستمعامل Automotive در فروشگاه Play منتشر کنید. برای جزئیات بیشتر در مورد فرآیند انتشار، به توزیع برنامههای Android برای اتومبیلها مراجعه کنید.
اگر هنگام توسعه برنامه پارک شده خود برای سیستم عامل Android Automotive به مشکلی برخورد کردید یا درخواست ویژگی داشتید، می توانید آن را با استفاده از Google Issue Tracker گزارش دهید. حتماً تمام اطلاعات درخواستی را در قالب شماره پر کنید. قبل از ثبت یک مشکل جدید، بررسی کنید که آیا قبلاً در لیست مشکلات گزارش شده است یا خیر. میتوانید با کلیک کردن روی ستاره برای مشکلی در ردیاب مشترک شوید و به مسائل رأی دهید. برای اطلاعات بیشتر، به اشتراک در یک مشکل مراجعه کنید.