कार के डिसप्ले के साथ काम करने की सुविधा की मदद से, फ़ोन और टैबलेट के ऐप्लिकेशन, Automotive डिवाइसों पर अच्छी तरह काम कर पाते हैं.
सुविधाओं में शामिल हैं:
- डीपीआई स्केलिंग: डिसप्ले के डीपीआई के हिसाब से, ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) एलिमेंट का साइज़ बदलना.
- ऐप्लिकेशन रेंडरिंग के लिए सुरक्षित जगह: ऐप्लिकेशन के कॉन्टेंट को सुरक्षित जगह में रखना, ताकि सिस्टम के यूज़र इंटरफ़ेस (यूआई) एलिमेंट की वजह से, कॉन्टेंट न छिप पाए.
- ऐप्लिकेशन क्लासिफ़िकेशन लॉजिक: ऐसे ऐप्लिकेशन की पहचान करना जिनके लिए, कार के डिसप्ले के साथ काम करने की सुविधा ज़रूरी है.
कार के डिसप्ले के साथ काम करने की सुविधा से जुड़ी सुविधाएं
प्लैटफ़ॉर्म, Automotive डिवाइसों के डिसप्ले पर ऐप्लिकेशन रेंडरिंग और स्केलिंग को ऑप्टिमाइज़ करने के लिए कई तरीके उपलब्ध कराता है.
डीपीआई स्केलिंग
डीपीआई स्केलिंग की सुविधा की मदद से, डिवाइस बनाने वाली कंपनियां, कार के डिसप्ले के साथ काम करने की सुविधा की ज़रूरत वाले अलग-अलग या सभी ऐप्लिकेशन के लिए, डेंसिटी डीपीआई को स्केल कर सकती हैं.
ऐप्लिकेशन की डेंसिटी स्केलिंग कॉन्फ़िगर करने के लिए:
/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>कार के डिसप्ले के साथ काम करने की सुविधा की ज़रूरत वाले सभी ऐप्लिकेशन के लिए, डिफ़ॉल्ट स्केल वैल्यू सेट करने के लिए, डिसप्ले 0 के लिए डिफ़ॉल्ट स्केल को
<scale display="0">1.0</scale>में बदलें. यह वैल्यू, इनवर्स स्केल वैल्यू होती है. उदाहरण के लिए, कार के डिसप्ले के साथ काम करने की सुविधा की ज़रूरत वाले ऐप्लिकेशन को 1.5 गुना स्केल करने के लिए, स्केल वैल्यू को(1 / 1.5) = 0.67पर सेट करें:<config> <scale display="0">0.67</scale> </config>किसी खास ऐप्लिकेशन के लिए स्केल वैल्यू सेट करने के लिए, कॉन्फ़िगरेशन में नया
scaleएलिमेंट जोड़ें. इस उदाहरण में, YouTube Automotive को 1.43 गुना स्केल किया गया है. जैसे,(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
किसी 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, }
ऐप्लिकेशन के लिए सुरक्षित जगह
फ़ोन और टैबलेट के ऐप्लिकेशन अक्सर Automotive में मौजूद बड़े सिस्टम बार के लिए डिज़ाइन नहीं किए जाते. इन ऐप्लिकेशन को सिस्टम बार या सिस्टम ओवरले के नीचे कॉन्टेंट दिखाने से रोका जाना चाहिए. ऐसा न करने पर, वे इंटरैक्टिव एलिमेंट को ऐसी जगह पर रेंडर कर सकते हैं जो असली उपयोगकर्ता को नहीं दिखती.
ऐप्लिकेशन के लिए सुरक्षित जगह, स्केलेबल यूज़र इंटरफ़ेस (यूआई) SafeBounds का इस्तेमाल करके लागू की जाती है.
ऐप्लिकेशन क्लासिफ़िकेशन लॉजिक
CarPackageManager.requiresDisplayCompat(..) का इस्तेमाल करके, ऐसी अतिरिक्त सुविधाएं बनाई जा सकती हैं जिनसे ऐप्लिकेशन की कंपैटिबिलिटी बेहतर होती है. उदाहरण के लिए, इस सुविधा का इस्तेमाल करके, बैक बटन या अतिरिक्त यूज़र इंटरफ़ेस (यूआई) जोड़ा जा सकता है.
ऐप्लिकेशन डेवलपर, ऐप्लिकेशन के मेनिफ़ेस्ट में मेटाडेटा शामिल करके, कार के डिसप्ले के साथ काम करने की सुविधा का विकल्प चुन सकते हैं:
<meta-data
android:name="android.software.car.display_compatibility"
android:value="true" />
सिस्टम, इस लॉजिक का इस्तेमाल करके यह पता लगाता है कि किसी ऐप्लिकेशन के लिए, कार के डिसप्ले के साथ काम करने की सुविधा की ज़रूरत है या नहीं. इस लॉजिक का आकलन क्रम से किया जाता है:
- मेनिफ़ेस्ट मेटाडेटा
android.software.car.display_compatibility:- अगर
android:value="true"है, तो ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत है - अगर
android:value="false"है, तो ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत नहीं है - अगर मेटाडेटा मौजूद नहीं है, तो अगले चरण पर जाएं.
- अगर
- सुविधा का इस्तेमाल
android.hardware.type.automotive:- अगर सुविधा का एलान किया गया है, तो ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत नहीं है. भले ही,
android:requiredकी वैल्यूtrueहो याfalse - अगर सुविधा मौजूद नहीं है, तो अगले चरण पर जाएं.
- अगर सुविधा का एलान किया गया है, तो ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत नहीं है. भले ही,
- ऐप्लिकेशन गतिविधियां:
- अगर ऐप्लिकेशन में कोई गतिविधि नहीं है, जैसे कि RRO, हेडलेस ऐप्लिकेशन या सेवाएं, → ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत नहीं है
- अगर ऐप्लिकेशन में गतिविधियां हैं, तो अगले चरण पर जाएं.
- ऐप्लिकेशन की जानकारी:
- अगर ऐप्लिकेशन को खास अधिकार मिले हैं, तो ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत नहीं है
- अगर ऐप्लिकेशन, सिस्टम ऐप्लिकेशन है (
FLAG_SYSTEM), तो ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत नहीं है - अन्यथा, अगले चरण पर जाएं.
- हस्ताक्षर की जानकारी:
- अगर ऐप्लिकेशन पर प्लैटफ़ॉर्म के हस्ताक्षर किए गए हैं (Android फ़्रेमवर्क के जैसे ही हस्ताक्षर किए गए हैं), तो ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत नहीं है
- अन्यथा, अगले चरण पर जाएं.
- फ़ॉलबैक का फ़ैसला:
- अगर ऑप्ट-आउट किए बिना सभी चरण पूरे हो जाते हैं, तो ऐप्लिकेशन के लिए कंपैटिबिलिटी की ज़रूरत है
देखें
CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.
डिवाइस से जुड़ी सहायता
कार के डिसप्ले के साथ काम करने की सुविधा वाले डिवाइसों को, सुविधा के एलान का इस्तेमाल करके, कंपैटिबिलिटी का एलान करना होगा:
<feature name="android.software.car.display_compatibility" />