سازگاری با نمایشگر خودرو

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

امکانات عبارتند از:

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

ویژگی‌های سازگاری

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

مقیاس بندی DPI

قابلیت مقیاس‌بندی DPI به سازندگان دستگاه‌ها این امکان را می‌دهد که چگالی DPI برنامه‌های منفرد یا تمام برنامه‌هایی که به سازگاری نمایشگر خودرو نیاز دارند را مقیاس‌بندی کنند.

برای پیکربندی مقیاس‌بندی تراکم برنامه‌ها:

  1. یک فایل پیکربندی /product/etc/display_compat_config.xml اضافه کنید:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
        Each scale factor can have the following attributes
    
        display     (required) Specifies the displayId to which this scale factor will be applied.
        packageName (optional) Specifies the packageName to which the scale factor will be applied.
                    If omitted, the scaling will apply to all packages.
    
        For example:
        <scale display="0" packageName="com.android.car.media.localmediaplayer">0.5</scale>
    
        This means that only package `com.android.car.media.localmediaplayer` on display `0` will be scaled.
    -->
    <config>
    <scale display="0">1.0</scale>
    </config>
    
  2. برای تنظیم مقدار مقیاس پیش‌فرض برای همه برنامه‌هایی که به Car Display Compat نیاز دارند، مقیاس پیش‌فرض برای display 0 را به <scale display="0">1.0</scale> تغییر دهید. این مقدار، معکوس مقدار مقیاس است. برای مثال، برای مقیاس‌بندی برنامه‌هایی که به Car Display Compat به اندازه 1.5x نیاز دارند، مقدار مقیاس را روی (1 / 1.5) = 0.67 تنظیم کنید:

    <config>
        <scale display="0">0.67</scale>
    </config>
    
  3. برای تنظیم مقدار مقیاس برای یک برنامه خاص، یک عنصر scale جدید به پیکربندی اضافه کنید. در این مثال، YouTube Automotive به 1.43x مقیاس‌بندی شده است (برای مثال، (1 / 1.43) = 0.7 ).

    <config>
        <scale display="0">0.67</scale>
        <scale display="0" packageName="com.google.android.apps.automotive.youtube">0.7</scale>
    </config>
    

اگر سیستم هنگام تغییر /product/etc/display_compat_config.xml در حال اجرا بود، برای اعمال پیکربندی جدید باید حافظه پنهان را پاک کنید. از این ماکرو برای پاک کردن حافظه پنهان استفاده کنید:

SECURE_SETTING_KEY="android.software.car.display_compatibility:settings:secure"
USER_ID_LIST=$(adb shell cmd user list -v | grep 'id=' | cut -d'=' -f2 | cut -d',' -f1)
for USER_ID in $USER_ID_LIST; do
    echo "Deleting Display Compat config for user: $USER_ID"
    adb shell settings delete secure --user $USER_ID $SECURE_SETTING_KEY
    sleep 1
    echo
done
  1. فایل پیکربندی و تعریف ویژگی را به یک نسخه AAOS اضافه کنید، برای مثال، در vendor/ OEM_NAME /products/displaycompat :

    # File: vendor/OEM_NAME/products/displaycompat/Android.bp
    
    prebuilt_etc {
        name: "display_compat_config",
        filename: "display_compat_config.xml",
        src: "display_compat_config.xml",
        product_specific: true,
    }
    

منطقه امن برنامه

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

ناحیه امن برنامه با استفاده از Scalable UI SafeBounds پیاده‌سازی شده است.

منطق طبقه‌بندی برنامه

شما می‌توانید از CarPackageManager.requiresDisplayCompat(..) برای ساخت قابلیت‌های اضافی که سازگاری برنامه را افزایش می‌دهد، استفاده کنید. برای مثال، می‌توانید از این قابلیت برای اضافه کردن دکمه بازگشت یا رابط کاربری اضافی استفاده کنید.

توسعه‌دهندگان برنامه می‌توانند با گنجاندن فراداده در مانیفست برنامه، سازگاری با نمایشگر خودرو را انتخاب کنند:

<meta-data
    android:name="android.software.car.display_compatibility"
    android:value="true" />

سیستم با استفاده از منطق زیر (که به ترتیب ارزیابی می‌شوند) ارزیابی می‌کند که آیا یک برنامه به ویژگی‌های سازگاری با صفحه نمایش خودرو نیاز دارد یا خیر:

  1. فراداده‌ی مانیفست android.software.car.display_compatibility :
    • اگر android:value="true"برنامه نیاز به سازگاری دارد
    • اگر android:value="false"برنامه به compat نیاز ندارد
    • اگر فراداده وجود ندارد، به بررسی بعدی بروید.
  2. از ویژگی android.hardware.type.automotive استفاده می‌کند:
    • اگر ویژگی اعلام شده باشد (صرف نظر از اینکه android:required true یا false باشد) → برنامه به compat نیاز ندارد
    • اگر این ویژگی وجود ندارد، به بررسی بعدی بروید.
  3. فعالیت‌های اپلیکیشن:
    • اگر برنامه هیچ فعالیتی ندارد (مانند RROها، برنامه‌های بدون سر یا سرویس‌ها) → برنامه نیازی به سازگاری ندارد
    • اگر برنامه فعالیت‌هایی دارد، به بررسی بعدی بروید.
  4. اطلاعات برنامه:
    • اگر برنامه ممتاز است → برنامه نیازی به سازگاری ندارد
    • اگر برنامه یک برنامه سیستمی است ( FLAG_SYSTEM ) → برنامه نیازی به compat ندارد
    • در غیر این صورت، به بررسی بعدی بروید.
  5. اطلاعات امضا:
    • اگر برنامه توسط پلتفرم امضا شده باشد (با همان امضای چارچوب اندروید امضا شده باشد) → برنامه نیازی به سازگاری ندارد
    • در غیر این صورت، به بررسی بعدی بروید.
  6. تصمیم جایگزین:
    • اگر همه بررسی‌ها بدون انصراف انجام شود → برنامه نیاز به سازگاری دارد

به CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked مراجعه کنید.

پشتیبانی دستگاه

دستگاه‌هایی که از سازگاری نمایشگر خودرو پشتیبانی می‌کنند، باید با استفاده از اعلان ویژگی، پشتیبانی خود را اعلام کنند:

<feature name="android.software.car.display_compatibility" />