अपने मीडिया ऐप्लिकेशन में Android Automotive OS की सुविधा जोड़ें

Android Automotive OS की मदद से लोग, कार में ऐप्लिकेशन इंस्टॉल कर सकते हैं. इस प्लैटफ़ॉर्म के लोगों तक पहुंचने के लिए, आपको ड्राइवर के लिए ऑप्टिमाइज़ किया गया कोई ऐसा ऐप्लिकेशन उपलब्ध कराना होगा जो Android Automotive OS के साथ काम करता हो. Android Auto ऐप्लिकेशन में, करीब सभी कोड और संसाधनों का फिर से इस्तेमाल किया जा सकता है. हालांकि, आपको अलग से एक ऐसा बिल्ड बनाना होगा जो इस पेज पर दी गई ज़रूरी शर्तों को पूरा करता हो.

डेवलपमेंट की खास जानकारी

Android Automotive OS के साथ काम करने की सुविधा जोड़ने के लिए, आपको सिर्फ़ कुछ चरणों का पालन करना होगा. इसके बारे में यहां बताया गया है:

  1. Android Studio में, कार से जुड़ी सुविधाएं चालू करना.
  2. ऑटोमोटिव मॉड्यूल बनाना.
  3. अपनी Gradle डिपेंडेंसी अपडेट करें.
  4. इसके अलावा, सेटिंग लागू करें और साइन-इन करने की गतिविधियां करें.
  5. ज़रूरी नहीं: मीडिया होस्ट के बारे में जानकारी पढ़ें.

डिज़ाइन से जुड़ी बातें

Android Automotive OS, आपके ऐप्लिकेशन की मीडिया ब्राउज़र सेवा से मिले मीडिया कॉन्टेंट को व्यवस्थित करता है. इसका मतलब है कि जब कोई उपयोगकर्ता मीडिया चलाने की सुविधा को ट्रिगर करता है, तब आपका ऐप्लिकेशन यूज़र इंटरफ़ेस (यूआई) नहीं बनाता है और न ही आपकी कोई गतिविधि शुरू करता है.

अगर सेटिंग या साइन-इन करने की गतिविधियां लागू की जा रही हैं, तो ये गतिविधियां वाहन के हिसाब से ऑप्टिमाइज़ होनी चाहिए. अपने ऐप्लिकेशन के इन हिस्सों को डिज़ाइन करते समय, Android Automotive OS के लिए डिज़ाइन के दिशा-निर्देश देखें.

अपना प्रोजेक्ट सेट अप करना

Android Automotive OS के लिए सहायता चालू करने के लिए, आपको अपने ऐप्लिकेशन के प्रोजेक्ट के कई हिस्सों को सेट अप करना होगा.

Android Studio में ऑटोमोटिव सुविधाएं चालू करना

Android Studio 4.0 या इसके बाद के वर्शन का इस्तेमाल करें, ताकि यह पक्का किया जा सके कि Automotive OS की सभी सुविधाएं चालू हैं.

ऑटोमोटिव मॉड्यूल बनाना

Android Automotive OS के कुछ कॉम्पोनेंट, जैसे कि मेनिफ़ेस्ट के लिए प्लैटफ़ॉर्म के हिसाब से ज़रूरी शर्तें होती हैं. एक ऐसा मॉड्यूल बनाएं जो इन कॉम्पोनेंट के कोड को आपके प्रोजेक्ट के अन्य कोड से अलग रख सके. जैसे, आपके फ़ोन ऐप्लिकेशन के लिए इस्तेमाल किया गया कोड.

अपने प्रोजेक्ट में ऑटोमोटिव मॉड्यूल जोड़ने के लिए, यह तरीका अपनाएं:

  1. Android Studio में, File > New > New Module पर क्लिक करें.
  2. ऑटोमोटिव मॉड्यूल को चुनें. इसके बाद, आगे बढ़ें पर क्लिक करें.
  3. ऐप्लिकेशन/लाइब्रेरी का नाम डालें. यह वह नाम है जो लोगों को Android Automotive OS पर आपके ऐप्लिकेशन के लिए दिखता है.
  4. मॉड्यूल का नाम डालें.
  5. अपने ऐप्लिकेशन से मैच करने के लिए, पैकेज के नाम में बदलाव करें.
  6. कम से कम एसडीके के लिए, एपीआई 28: Android 9.0 (Pie) चुनें. इसके बाद, आगे बढ़ें पर क्लिक करें.

    Android Automotive OS की सुविधा वाली सभी कारें, Android 9 (एपीआई लेवल 28) या इसके बाद के वर्शन पर काम करती हैं. इसलिए, इस वैल्यू को चुनने पर, सभी ज़रूरी शर्तें पूरी करने वाली कारों को टारगेट किया जाता है.

  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 OS के साथ काम करने की सुविधा का एलान करता है. ध्यान दें कि मेनिफ़ेस्ट में कोई गतिविधि नहीं बताई गई है.

अगर आपने सेटिंग या साइन-इन करने से जुड़ी गतिविधियां लागू की हैं, तो उन्हें यहां जोड़ें. इन गतिविधियों को सिस्टम, साफ़ तौर पर बताए गए इंटेंट का इस्तेमाल करके ट्रिगर करता है. साथ ही, ये ऐसी गतिविधियां होती हैं जिन्हें Android Automotive OS वाले ऐप्लिकेशन के मेनिफ़ेस्ट में शामिल किया जाता है.

कोई भी सेटिंग या साइन-इन गतिविधि जोड़ने के बाद, मेनिफ़ेस्ट फ़ाइल को पूरा करें. इसके लिए, <application> एलिमेंट के android:appCategory एट्रिब्यूट को "audio" पर सेट करें.

<application
  ...
  android:appCategory="audio" />

सुविधा से जुड़ी ज़रूरी शर्तों के बारे में बताना

Android Automotive OS के लिए बनाए गए सभी ऐप्लिकेशन को, Google Play का इस्तेमाल करके डिस्ट्रिब्यूट करने के लिए, कुछ ज़रूरी शर्तें पूरी करनी होंगी. ज़्यादा जानकारी के लिए, Google Play की सुविधा के साथ Meet का इस्तेमाल करने से जुड़ी ज़रूरी शर्तें देखें.

Android Automotive OS के साथ मीडिया ऐप्लिकेशन के काम करने का एलान करना

यह मेनिफ़ेस्ट एंट्री इस्तेमाल करके यह एलान करें कि आपका ऐप्लिकेशन Android Automotive OS के साथ काम करता है:

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

मेनिफ़ेस्ट की यह एंट्री, एक ऐसी एक्सएमएल फ़ाइल को रेफ़र करती है जिसमें ऑटोमोटिव सुविधाओं के बारे में बताया गया है जो आपके ऐप्लिकेशन के साथ काम करती हैं.

यह बताने के लिए कि आपके पास मीडिया ऐप्लिकेशन है, अपने प्रोजेक्ट की res/xml/ डायरेक्ट्री में automotive_app_desc.xml नाम की एक एक्सएमएल फ़ाइल जोड़ें. इस फ़ाइल में यह कॉन्टेंट शामिल करें:

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

इंटेंट फ़िल्टर

Android Automotive OS, आपके मीडिया ऐप्लिकेशन में गतिविधियों को ट्रिगर करने के लिए, साफ़ तौर पर बताए गए इंटेंट का इस्तेमाल करता है. ऐसी कोई भी गतिविधि शामिल न करें जिसमें मेनिफ़ेस्ट फ़ाइल में CATEGORY_LAUNCHER या ACTION_MAIN इंटेंट फ़िल्टर हों.

नीचे दिए गए उदाहरण जैसी गतिविधियां आम तौर पर किसी फ़ोन या अन्य मोबाइल डिवाइस को टारगेट करती हैं. इन गतिविधियों को उस मॉड्यूल में शामिल करें जो फ़ोन ऐप्लिकेशन बनाता है. इन्हें उस मॉड्यूल में शामिल न करें जो Android Automotive OS ऐप्लिकेशन बनाता है.

<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>

अपनी Gradle डिपेंडेंसी अपडेट करना

हमारा सुझाव है कि आप मीडिया ब्राउज़र सेवा को एक अलग मॉड्यूल में रखें. इसे फ़ोन ऐप्लिकेशन और ऑटोमोटिव मॉड्यूल, दोनों के साथ शेयर किया जा सकता है. अगर इस तरीके का इस्तेमाल किया जा रहा है, तो आपको अपने ऑटोमोटिव मॉड्यूल को अपडेट करना होगा, ताकि उसमें शेयर किया गया मॉड्यूल शामिल हो सके. इसके लिए, यहां दिया गया स्निपेट देखें:

my-auto-module/build.gradle

शानदार

buildscript {
    ...
    dependencies {
        ...
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation(project(":shared_module_name"))
    }
}

सेटिंग लागू करना और साइन-इन करने से जुड़ी गतिविधियां

मीडिया ब्राउज़र सेवा के अलावा, अपने Android Automotive OS ऐप्लिकेशन के लिए वाहन के हिसाब से ऑप्टिमाइज़ की गई सेटिंग और साइन-इन करने की गतिविधियां भी उपलब्ध कराई जा सकती हैं. इन गतिविधियों की मदद से, ऐप्लिकेशन की ऐसी सुविधाएं उपलब्ध कराई जा सकती हैं जो Android Media API में शामिल नहीं हैं.

इन गतिविधियों को सिर्फ़ तब लागू करें, जब आपके Android Automotive OS ऐप्लिकेशन को लोगों को साइन इन करने या ऐप्लिकेशन की सेटिंग तय करने की अनुमति देनी हो. Android Auto इन गतिविधियों का इस्तेमाल नहीं करता.

गतिविधि से जुड़े वर्कफ़्लो

इस डायग्राम में दिखाया गया है कि Android Automotive OS का इस्तेमाल करके, कोई व्यक्ति आपकी सेटिंग और साइन-इन गतिविधियों के साथ कैसे इंटरैक्ट करता है:

सेटिंग और साइन-इन करने की गतिविधियों के लिए Workflows

पहली इमेज. सेटिंग और साइन-इन करने की गतिविधि के वर्कफ़्लो.

सेटिंग और साइन-इन करने की गतिविधियों में ध्यान भटकाने वाली चीज़ों को कम करना

यह पक्का करने के लिए कि आपकी सेटिंग और साइन-इन गतिविधियां सिर्फ़ तब इस्तेमाल की जा सकें, जब उपयोगकर्ता का वाहन पार्क किया गया हो, पुष्टि करें कि <activity> एलिमेंट में यह <meta-data> एलिमेंट शामिल न हो. अगर ऐसा कोई एलिमेंट मौजूद है, तो समीक्षा के दौरान आपके ऐप्लिकेशन को अस्वीकार कर दिया जाएगा.

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

सेटिंग से जुड़ी गतिविधि जोड़ना

आपके पास, वाहन के हिसाब से ऑप्टिमाइज़ की गई सेटिंग वाली गतिविधि जोड़ने का विकल्प होता है. इससे लोग अपनी कार में आपके ऐप्लिकेशन की सेटिंग कॉन्फ़िगर कर पाएंगे. आपकी सेटिंग से जुड़ी गतिविधि, अन्य वर्कफ़्लो भी उपलब्ध करा सकती है. जैसे, किसी उपयोगकर्ता के खाते में साइन इन या साइन आउट करना या उपयोगकर्ता खातों के बीच स्विच करना. ध्यान रखें कि यह गतिविधि सिर्फ़ Android Automotive OS पर चलने वाले ऐप्लिकेशन से ट्रिगर होती है. Android Auto से कनेक्ट किए गए फ़ोन ऐप्लिकेशन, इसका इस्तेमाल नहीं करते.

सेटिंग वाली गतिविधि का एलान करना

आपको अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, सेटिंग ऐक्टिविटी के बारे में बताना होगा. इसके लिए, यहां दिए गए कोड स्निपेट का इस्तेमाल करें:

<application>
    ...
    <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>
    ...
</application>

सेटिंग से जुड़ी गतिविधि लागू करना

जब कोई उपयोगकर्ता आपका ऐप्लिकेशन लॉन्च करता है, तो Android Automotive OS, सेटिंग ऐक्टिविटी का पता लगाता है. यह वही ऐक्टिविटी होती है जिसके बारे में आपने बताया है. इसके बाद, यह कोई अफ़ॉर्डेंस दिखाता है, जैसे कि कोई आइकॉन. उपयोगकर्ता, कार के डिसप्ले का इस्तेमाल करके इस अफ़ोर्डेंस पर टैप कर सकता है या इसे चुन सकता है. इससे वह गतिविधि पर जा सकता है. Android Automotive OS, ACTION_APPLICATION_PREFERENCES इंटेंट भेजता है. इससे आपके ऐप्लिकेशन को सेटिंग ऐक्टिविटी शुरू करने का निर्देश मिलता है.

इस सेक्शन के बाकी हिस्से में बताया गया है कि अपने ऐप्लिकेशन के लिए सेटिंग गतिविधि लागू करने के लिए, Universal Android Music Player (UAMP) सैंपल के तौर पर मिला ऐप्लिकेशन से कोड को कैसे बदला जा सकता है.

शुरू करने के लिए, सैंपल कोड डाउनलोड करें:

# Clone the UAMP repository
git clone https://github.com/android/uamp.git

# Fetch the appropriate pull request to your local repository
git fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME

# Switch to the new branch
git checkout NEW_LOCAL_BRANCH_NAME

अपनी गतिविधि लागू करने के लिए, यह तरीका अपनाएं:

  1. automotive/automotive-lib फ़ोल्डर को अपने ऑटोमोटिव मॉड्यूल में कॉपी करें.
  2. automotive/src/main/res/xml/preferences.xml में दिए गए उदाहरण की तरह, प्राथमिकताओं का ट्री तय करें.
  3. PreferenceFragmentCompat लागू करें, ताकि सेटिंग से जुड़ी आपकी गतिविधि दिखे. ज़्यादा जानकारी के लिए, UAMP में मौजूद SettingsFragment.kt और SettingsActivity.kt फ़ाइलें देखें. साथ ही, Android की सेटिंग से जुड़ी गाइड देखें.

सेटिंग गतिविधि लागू करते समय, Preference library में मौजूद कुछ कॉम्पोनेंट इस्तेमाल करने के लिए, इन सबसे सही तरीकों को ध्यान में रखें:

  • सेटिंग में की गई गतिविधि के मुख्य व्यू में, दो से ज़्यादा लेवल की जानकारी न हो.
  • DropDownPreference का इस्तेमाल न करें. इसके बजाय, ListPreference का इस्तेमाल करें.
  • संगठन के कॉम्पोनेंट:
    • PreferenceScreen
      • यह आपकी प्राथमिकताओं के ट्री का टॉप लेवल होना चाहिए.
    • PreferenceCategory
      • इसका इस्तेमाल, Preference ऑब्जेक्ट को एक साथ ग्रुप करने के लिए किया जाता है.
      • title को शामिल करें.
  • नीचे दिए गए सभी कॉम्पोनेंट में key और title शामिल करें. summary, icon या दोनों को भी शामिल किया जा सकता है:
    • Preference
      • PreferenceFragmentCompat को लागू करने के onPreferenceTreeClick() कॉलबैक में लॉजिक को अपनी पसंद के मुताबिक बनाएं.
    • CheckBoxPreference
      • शर्त के हिसाब से टेक्स्ट दिखाने के लिए, summary के बजाय summaryOn या summaryOff का इस्तेमाल किया जा सकता है.
    • SwitchPreference
      • शर्त के हिसाब से टेक्स्ट दिखाने के लिए, summary के बजाय summaryOn या summaryOff का इस्तेमाल किया जा सकता है.
      • इसमें switchTextOn या switchTextOff हो सकता है.
    • SeekBarPreference
      • min, max, और defaultValue को शामिल करें.
    • EditTextPreference
      • dialogTitle, positiveButtonText, और negativeButtonText को शामिल करें.
      • इसमें dialogMessage और dialogLayoutResource, दोनों या इनमें से कोई एक हो सकता है.
    • com.example.android.uamp.automotive.lib.ListPreference
      • यह स्कोर, ज़्यादातर ListPreference से मिलता है.
      • इसका इस्तेमाल, Preference ऑब्जेक्ट की एक विकल्प वाली सूची दिखाने के लिए किया जाता है.
      • इसमें entries और उससे जुड़े entryValues का कलेक्शन होना चाहिए.
    • com.example.android.uamp.automotive.lib.MultiSelectListPreference
      • यह जानकारी ज़्यादातर MultiSelectListPreference से ली गई है
      • इसका इस्तेमाल, Preference ऑब्जेक्ट की मल्टीपल चॉइस वाली सूची दिखाने के लिए किया जाता है.
      • इसमें entries और उससे जुड़े entryValues का कलेक्शन होना चाहिए.

साइन-इन गतिविधि जोड़ना

अगर आपके ऐप्लिकेशन का इस्तेमाल करने से पहले, उपयोगकर्ता को साइन इन करना पड़ता है, तो वाहन के हिसाब से ऑप्टिमाइज़ की गई साइन-इन गतिविधि जोड़ी जा सकती है. इससे ऐप्लिकेशन में साइन इन और साइन आउट करने की प्रोसेस मैनेज की जा सकती है. सेटिंग गतिविधि में भी साइन इन और साइन आउट करने के वर्कफ़्लो जोड़े जा सकते हैं. हालांकि, अगर उपयोगकर्ता के साइन इन करने तक आपके ऐप्लिकेशन का इस्तेमाल नहीं किया जा सकता, तो साइन इन करने के लिए अलग से गतिविधि का इस्तेमाल करें. ध्यान रखें कि यह गतिविधि सिर्फ़ Android Automotive OS पर चलने वाले ऐप्लिकेशन से ट्रिगर होती है. Android Auto से कनेक्ट किए गए फ़ोन ऐप्लिकेशन, इसका इस्तेमाल नहीं करते.

ऐप्लिकेशन शुरू करने पर साइन इन करना ज़रूरी है

अगर आपको यह ज़रूरी करना है कि उपयोगकर्ता को आपके ऐप्लिकेशन का इस्तेमाल करने से पहले साइन इन करना पड़े, तो आपकी मीडिया ब्राउज़र सेवा को ये काम करने होंगे:

  1. अपनी सेवा के onLoadChildren() तरीके में, sendResult() तरीके का इस्तेमाल करके onLoadChildren() नतीजा भेजें.null
  2. setState() तरीके का इस्तेमाल करके, मीडिया सेशन के PlaybackStateCompat को STATE_ERROR पर सेट करें. इससे Android Automotive OS को पता चलता है कि गड़बड़ी ठीक होने तक कोई अन्य कार्रवाई नहीं की जा सकती.
  3. मीडिया सेशन के PlaybackStateCompat गड़बड़ी के कोड को ERROR_CODE_AUTHENTICATION_EXPIRED पर सेट करें. इससे Android Automotive OS को पता चलता है कि उपयोगकर्ता को पुष्टि करनी है.
  4. setErrorMessage() तरीके का इस्तेमाल करके, मीडिया सेशन के PlaybackStateCompat गड़बड़ी के मैसेज को सेट करें. यह गड़बड़ी का मैसेज उपयोगकर्ता को दिखता है. इसलिए, इसे उपयोगकर्ता की मौजूदा स्थान-भाषा के हिसाब से बनाएं.
  5. setExtras() तरीके का इस्तेमाल करके, मीडिया सेशन के PlaybackStateCompat एक्स्ट्रा सेट करें. इन दो या तीन कुंजियों को शामिल करें:

    • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL: यह एक स्ट्रिंग होती है. इसे साइन-इन करने की प्रोसेस शुरू करने वाले बटन पर दिखाया जाता है. यह स्ट्रिंग उपयोगकर्ता को दिखती है. इसलिए, इसे उपयोगकर्ता की मौजूदा स्थान-भाषा के हिसाब से बनाएं.
    • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT: यह एक PendingIntent है. जब उपयोगकर्ता, PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL में बताए गए बटन पर टैप करता है, तब यह उसे साइन-इन गतिविधि वाले पेज पर ले जाता है.
    • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_USING_CAR_APP_LIBRARY_INTENT: यह एक PendingIntent है, जो उपयोगकर्ता को कार के लिए ऐप्लिकेशन लाइब्रेरी में साइन इन करने की गतिविधि पर ले जाता है. Car App Library होस्ट को ड्राइविंग के लिए ऑप्टिमाइज़ किया गया है. इसलिए, इंटेंट से गड़बड़ी ठीक करने वाली स्क्रीन अपने-आप हट जाती है और तुरंत साइन-इन स्क्रीन दिखती है. अगर आपने इसे अतिरिक्त के तौर पर सेट किया है, तो पिछले दो अतिरिक्त को भी सेट करें. इससे यह पक्का किया जा सकेगा कि यह सुविधा, पुराने वाहनों के साथ काम करती है.

नीचे दिए गए कोड स्निपेट में बताया गया है कि आपका ऐप्लिकेशन, उपयोगकर्ता को ऐप्लिकेशन इस्तेमाल करने से पहले साइन इन करने के लिए कैसे कह सकता है:

Kotlin

import androidx.media.utils.MediaConstants

val signInIntent = Intent(this, SignInActivity::class.java)
val signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
    signInIntent, 0)
val extras = Bundle().apply {
    putString(
        MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL,
        "Sign in"
    )
    putParcelable(
        MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT,
        signInActivityPendingIntent
    )
}

val playbackState = PlaybackStateCompat.Builder()
        .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
        .setErrorMessage(
            PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
            "Authentication required"
        )
        .setExtras(extras)
        .build()
mediaSession.setPlaybackState(playbackState)

Java

import androidx.media.utils.MediaConstants;

Intent signInIntent = new Intent(this, SignInActivity.class);
PendingIntent signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
    signInIntent, 0);
Bundle extras = new Bundle();
extras.putString(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL,
    "Sign in");
extras.putParcelable(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT,
    signInActivityPendingIntent);

PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder()
    .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
    .setErrorMessage(
            PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
            "Authentication required"
    )
    .setExtras(extras)
    .build();
mediaSession.setPlaybackState(playbackState);

उपयोगकर्ता की पुष्टि हो जाने के बाद, PlaybackStateCompat को STATE_ERROR के अलावा किसी दूसरी स्थिति पर सेट करें. इसके बाद, ऐक्टिविटी के finish() तरीके को कॉल करके, उपयोगकर्ता को Android Automotive OS पर वापस ले जाएं.

साइन-इन करने की सुविधा लागू करना

Google, कई तरह के पहचान से जुड़े टूल उपलब्ध कराता है. इनका इस्तेमाल करके, लोगों को कार में मौजूद ऐप्लिकेशन में साइन इन करने में मदद की जा सकती है. Firebase से पुष्टि करना जैसे कुछ टूल, फ़ुल-स्टैक टूलकिट उपलब्ध कराते हैं. इनकी मदद से, पुष्टि करने की सुविधा को अपनी पसंद के मुताबिक बनाया जा सकता है. अन्य टूल, उपयोगकर्ता के मौजूदा क्रेडेंशियल या अन्य टेक्नोलॉजी का इस्तेमाल करते हैं. इससे आपको उपयोगकर्ताओं के लिए, साइन-इन करने का बेहतर अनुभव बनाने में मदद मिलती है.

यहां दिए गए टूल की मदद से, उन लोगों के लिए साइन-इन करने की प्रोसेस को आसान बनाया जा सकता है जिन्होंने पहले किसी दूसरे डिवाइस पर साइन इन किया है:

  • एक टैप से साइन-इन और साइन-अप करने की सुविधा: अगर आपने पहले से ही अन्य डिवाइसों, जैसे कि फ़ोन ऐप्लिकेशन के लिए One Tap की सुविधा लागू की है, तो इसे Android Automotive OS ऐप्लिकेशन के लिए भी लागू करें. इससे, One Tap साइन इन करने की सुविधा का इस्तेमाल करने वाले मौजूदा लोगों को मदद मिलेगी.
  • Google साइन-इन: अगर आपने पहले से ही फ़ोन ऐप्लिकेशन जैसे अन्य डिवाइसों के लिए Google साइन-इन की सुविधा लागू की है, तो Android Automotive OS ऐप्लिकेशन के लिए Google साइन-इन की सुविधा लागू करें. इससे, Google साइन-इन की सुविधा का इस्तेमाल करने वाले मौजूदा लोगों को मदद मिलेगी.
  • Google की मदद से, जानकारी अपने-आप भरने की सुविधा: अगर लोगों ने अपने अन्य Android डिवाइसों पर, Google की मदद से, जानकारी अपने-आप भरने की सुविधा चालू की है, तो उनके क्रेडेंशियल Google Password Manager में सेव हो जाते हैं. जब वे उपयोगकर्ता आपके Android Automotive OS ऐप्लिकेशन में साइन इन करते हैं, तो 'Google की मदद से अपने-आप भरने की सुविधा' उन्हें सेव किए गए क्रेडेंशियल के सुझाव देती है. Google की मदद से, जानकारी अपने-आप भरने की सुविधा का इस्तेमाल करने के लिए, ऐप्लिकेशन को डेवलप करने की ज़रूरत नहीं होती. हालांकि, ऐप्लिकेशन डेवलपर बेहतर क्वालिटी के नतीजे पाने के लिए, अपने ऐप्लिकेशन को ऑप्टिमाइज़ कर सकते हैं. 'Google की मदद से अपने-आप भरने की सुविधा' का इस्तेमाल, Android 8.0 (एपीआई लेवल 26) या इसके बाद के वर्शन पर काम करने वाले सभी डिवाइसों पर किया जा सकता है. इनमें Android Automotive OS भी शामिल है.

AccountManager का इस्तेमाल करें

Android Automotive OS वाले जिन ऐप्लिकेशन में पुष्टि करने की सुविधा होती है उन्हें AccountManager का इस्तेमाल करना चाहिए. इसकी वजहें यहां दी गई हैं:

  • बेहतर UX और खाते को आसानी से मैनेज करने की सुविधा: उपयोगकर्ता, सिस्टम सेटिंग में मौजूद खातों के मेन्यू से अपने सभी खाते मैनेज कर सकते हैं. इसमें साइन-इन और साइन-आउट करना भी शामिल है.
  • "मेहमान" के तौर पर कार का इस्तेमाल करना: कार को शेयर किए गए डिवाइस के तौर पर इस्तेमाल किया जा सकता है. इसका मतलब है कि ओईएम, कार में "मेहमान" के तौर पर इस्तेमाल करने की सुविधा चालू कर सकते हैं. इसमें खाते नहीं जोड़े जा सकते. AccountManager के लिए, DISALLOW_MODIFY_ACCOUNTS का इस्तेमाल करके यह पाबंदी लगाई गई है.

अनुमतियां

अगर आपको उपयोगकर्ता से अनुमतियों का अनुरोध करना है, तो उसी फ़्लो का इस्तेमाल करें जिसका इस्तेमाल पिछले सेक्शन में दिखाए गए गतिविधि वर्कफ़्लो के डायग्राम में, पुष्टि करने की गतिविधि या सेटिंग की गतिविधि के लिए किया गया था.

साइन आउट करने की सुविधा लागू करना

साइन इन करने की सुविधा को लागू करने के लिए, आपने जिस भी तरीके का इस्तेमाल किया हो, जब उपयोगकर्ता साइन आउट करता है, तब आपको MediaBrowserServiceCompat#notifyChildrenChanged(rootId) को कॉल करना ज़रूरी है. इससे आपका ब्राउज़ ट्री अमान्य हो जाएगा, ताकि मीडिया होस्ट करने वाला ऐप्लिकेशन, उपयोगकर्ता से जुड़ी किसी भी जानकारी (जैसे कि खोज क्वेरी) को मिटा सके.

मीडिया होस्ट करने वाले ऐप्लिकेशन को शुरू करना

अपने ऐप्लिकेशन या ऐप्लिकेशन में मौजूद कॉन्टेंट को मीडिया होस्ट ऐप्लिकेशन में खोलने के लिए, इंटेंट बनाए जा सकते हैं. उदाहरण के लिए:

  • आपका ऐप्लिकेशन, पेंडिंग इंटेंट के साथ सूचना पोस्ट कर सकता है. इससे उपयोगकर्ता को नया कॉन्टेंट सुनने के लिए, आपका ऐप्लिकेशन खोलने की अनुमति मिलती है.
  • आपका ऐप्लिकेशन, डीप लिंक को हैंडल कर सकता है. साथ ही, होस्ट ऐप्लिकेशन को सबसे सही व्यू में खोल सकता है.

मीडिया होस्ट की सुविधाओं का पता लगाना

मीडिया होस्ट करने वाले ऐप्लिकेशन के वर्शन के हिसाब से, अलग-अलग सुविधाएं काम करती हैं. होस्ट, इन इंटेंट ऐक्शन के लिए इंटेंट फ़िल्टर शामिल करके, अलग-अलग सुविधाओं के लिए सहायता का संकेत देते हैं:

सभी मीडिया होस्ट ऐप्लिकेशन, MEDIA_TEMPLATE इंटेंट के साथ काम करते हैं. यह पता लगाने के लिए कि मीडिया होस्ट, MEDIA_TEMPLATE_V2 इंटेंट के साथ काम करता है या नहीं, queryIntentActivities() का इस्तेमाल इस तरह किया जा सकता है:

val isMediaTemplateV2Supported = packageManager.queryIntentActivities(
  Intent(MediaIntentExtras.ACTION_MEDIA_TEMPLATE_V2),
  //  MATCH_DEFAULT_ONLY  since the host should be started with implicit intents
  //  MATCH_SYSTEM_ONLY  excludes any apps that aren't preinstalled
  PackageManager.MATCH_DEFAULT_ONLY or PackageManager.MATCH_SYSTEM_ONLY
).size > 0

इंटेंट बनाना और उसका इस्तेमाल करना

मीडिया होस्ट करने वाले ऐप्लिकेशन के साथ कौनसी इंटेंट कार्रवाइयां काम करती हैं और आपका इस्तेमाल का खास उदाहरण क्या है, इसके आधार पर मीडिया होस्ट करने वाले ऐप्लिकेशन को शुरू करने के लिए इस्तेमाल किए जाने वाले इंटेंट को बनाते समय, ये अतिरिक्त सुविधाएं दी जा सकती हैं.

अतिरिक्त कुंजी प्रकार ब्यौरा कौनसी कार्रवाइयां की जा सकती हैं
EXTRA_KEY_MEDIA_COMPONENT String MediaBrowserService मीडिया होस्ट करने वाले ऐप्लिकेशन का फ़्लैट किया गया कॉम्पोनेंट का नाम कनेक्ट होना चाहिए. आम तौर पर, यह आपके ऐप्लिकेशन के लिए होता है. अगर इस एक्स्ट्रा को नहीं बताया जाता है, तो मीडिया होस्ट करने वाला ऐप्लिकेशन डिफ़ॉल्ट रूप से चालू मीडिया सोर्स पर सेट हो जाता है. MEDIA_TEMPLATE, MEDIA_TEMPLATE_V2
EXTRA_KEY_SEARCH_QUERY String कॉल करते समय इस्तेमाल की जाने वाली खोज क्वेरी MEDIA_TEMPLATE, MEDIA_TEMPLATE_V2
EXTRA_KEY_MEDIA_ID String ब्राउज़ व्यू में खोलने के लिए मीडिया आईडी. MEDIA_TEMPLATE_V2
EXTRA_KEY_SEARCH_ACTION Integer EXTRA_KEY_SEARCH_QUERY को खोजने की प्रोसेस पूरी होने के बाद की जाने वाली कार्रवाई. MEDIA_TEMPLATE_V2

उदाहरण के लिए, MEDIA_TEMPLATE_V2 की सुविधा देने वाले होस्ट के साथ, यहाँ दिया गया कोड मीडिया होस्ट ऐप्लिकेशन खोलेगा, उसे MyMediaBrowserService से कनेक्ट करेगा, "जैज़" खोजेगा, और फिर खोज के नतीजों में से पहला आइटम चलाएगा. अन्य सभी होस्ट पर, यह सिर्फ़ मीडिया होस्ट ऐप्लिकेशन खोलेगा और "जैज़" के लिए खोज करेगा. इसके बाद, उपयोगकर्ता को नतीजों में से कोई आइटम चुनकर चलाना होगा.

val startMediaHostIntent = Intent(ACTION_MEDIA_TEMPLATE)
  .putExtra(MediaIntentExtras.EXTRA_KEY_MEDIA_COMPONENT, MyMediaBrowserService::class.java)
  .putExtra(MediaIntentExtras.EXTRA_KEY_SEARCH_QUERY, "Jazz")
  .putExtra(MediaIntentExtras.EXTRA_KEY_SEARCH_ACTION, MediaIntentExtras.EXTRA_VALUE_PLAY_FIRST_ITEM_FROM_SEARCH)

context.startActivity(startMediaHostIntent)

Android Automotive OS डिवाइसों पर अपने मीडिया ऐप्लिकेशन का अनुभव बेहतर बनाने के लिए, अपने ऐप्लिकेशन में डीप लिंक की सुविधा जोड़ी जा सकती है. उदाहरण के लिए, इससे उपयोगकर्ता सीधे ब्राउज़र से या क्विक शेयर का इस्तेमाल करके फ़ोन से शेयर किए गए यूआरएल को पाने पर, आपका ऐप्लिकेशन खोल सकते हैं.

डीप लिंक इंटेंट फ़िल्टर जोड़ना

ओएस को यह बताने के लिए कि आपका ऐप्लिकेशन डीप लिंक हैंडल कर सकता है, उसमें सही इंटेंट फ़िल्टर वाली गतिविधियां होनी चाहिए. डीप लिंक के लिए इस्तेमाल किए जाने वाले इंटेंट फ़िल्टर के फ़ॉर्मैट के बारे में जानने के लिए, आने वाले लिंक के लिए इंटेंट फ़िल्टर जोड़ना लेख पढ़ें.

बेहतर उपयोगकर्ता अनुभव देने के लिए, उन सभी डीप लिंक को सपोर्ट करें जिन्हें आपका मोबाइल ऐप्लिकेशन सपोर्ट करता है. हालांकि, ऐसा तब करें, जब कार में मौजूद ऐप्लिकेशन उन्हें सही तरीके से सपोर्ट कर सकता हो. अगर आपके ऐप्लिकेशन में सेटिंग या साइन-इन करने की सुविधाएं हैं, तो सेटिंग और साइन-इन करने के डीप लिंक को हैंडल करने के लिए इंटेंट फ़िल्टर, <activity> मेनिफ़ेस्ट एलिमेंट में घोषित किए जाने चाहिए. मीडिया चलाने और डीप लिंक ब्राउज़ करने के लिए, इस सेक्शन में बाद में बताए गए तरीके से ट्रैंपोलिन गतिविधि का इस्तेमाल किया जा सकता है.

अपने ऐप्लिकेशन की गतिविधि शुरू करने के लिए इस्तेमाल किए गए इंटेंट को पढ़ने और उस पर प्रतिक्रिया देने के तरीके के बारे में जानने के लिए, आने वाले इंटेंट से डेटा पढ़ना लेख पढ़ें.

ब्राउज़ करने और चलाने के लिए यूज़र इंटरफ़ेस (यूआई) को होस्ट ऐप्लिकेशन से लिया जाता है. इसलिए, चलाने और ब्राउज़ करने की कार्रवाइयों के लिए डीप लिंक को मैनेज करने वाली गतिविधि का अपना कोई यूआई नहीं होना चाहिए.

इसके बजाय, इसका इस्तेमाल मुख्य रूप से मीडिया होस्ट ऐप्लिकेशन को शुरू करने के लिए इंटेंट बनाने और उसका इस्तेमाल करने के लिए किया जाना चाहिए. अगर ज़रूरी हो, तो यह आपके ऐप्लिकेशन की स्थिति में होने वाले किसी भी अन्य बदलाव को भी मैनेज कर सकता है. जैसे, मीडिया आइटम को कतार में जोड़ना. यहां दिए गए स्निपेट में, ट्रम्पोलिन गतिविधि को लागू करने का एक उदाहरण दिखाया गया है:

fun DeepLinkTrampolineActivity : ComponentActivity() {

  override fun onCreate() {
    handleIntent(intent)
  }

  override fun onNewIntent(intent: Intent) {
    handleIntent(intent)
  }

  private fun handleIntent(intent: Intent) {
    // Handle any side effects, such as adding a song to the queue
    ...
    // Build the intent used to start the media host app
    val startMediaHostIntent = ...
    startActivity(intent)
    // Finish the activity immediately so it isn't shown on screen
    finish()
  }
}

मीडिया होस्ट के बारे में जानकारी पढ़ने की अनुमति

मीडिया ब्राउज़र सेवा से कनेक्ट होने वाले सिस्टम ऐप्लिकेशन (इसमें इसका वर्शन भी शामिल है) के आधार पर, आपके ऐप्लिकेशन को ये अतिरिक्त सुविधाएं मिल सकती हैं:

गड़बड़ी ठीक करना

Android Automotive OS पर मीडिया ऐप्लिकेशन में होने वाली गड़बड़ियों की जानकारी, मीडिया सेशन के PlaybackStateCompat का इस्तेमाल करके दी जाती है. सभी गड़बड़ियों के लिए, PlaybackStateCompat में गड़बड़ी का सही कोड और गड़बड़ी का मैसेज सेट करें. इससे यूज़र इंटरफ़ेस में Toast दिखता है.

अगर कोई गड़बड़ी होती है, लेकिन वीडियो चलाया जा सकता है, तो नॉनफ़ेटल गड़बड़ी की सूचना दें. उदाहरण के लिए, कोई उपयोगकर्ता बिना साइन इन किए किसी ऐप्लिकेशन में संगीत चला सकता है. हालांकि, उसे कोई गाना स्किप करने से पहले साइन इन करना होगा. नॉनफ़ैटल गड़बड़ी का इस्तेमाल करने पर, सिस्टम उपयोगकर्ता को साइन इन करने का सुझाव दे सकता है. इससे मौजूदा मीडिया आइटम के प्लेबैक में रुकावट नहीं आएगी.

अगर आपने ऐसी गड़बड़ी की है जिससे प्रोग्राम पर कोई असर नहीं पड़ता है, तो गड़बड़ी के कोड और गड़बड़ी के मैसेज को छोड़कर, बाकी PlaybackStateCompat को पहले जैसा ही रखें. इस तरीके का इस्तेमाल करने से, मौजूदा मीडिया आइटम को तब तक चलाया जा सकता है, जब तक उपयोगकर्ता साइन इन करने का फ़ैसला नहीं कर लेता.

जब वीडियो चलाने की सुविधा उपलब्ध न हो, जैसे कि इंटरनेट कनेक्शन न होने पर और ऑफ़लाइन कॉन्टेंट उपलब्ध न होने पर, PlaybackStateCompat की स्थिति को STATE_ERROR पर सेट करें.

अपने PlaybackStateCompat में बाद के अपडेट के दौरान, गड़बड़ी के सभी कोड और गड़बड़ी के मैसेज मिटाएं, ताकि एक ही गड़बड़ी के लिए कई चेतावनियां न दिखें.

अगर आपको किसी भी समय ब्राउज़ ट्री लोड करने में समस्या आ रही है, तो एक खाली ब्राउज़ ट्री भेजें. उदाहरण के लिए, अगर आपको पुष्टि करने की ज़रूरत है और उपयोगकर्ता ने साइन इन नहीं किया है, तो ऐसा करें. इसे दिखाने के लिए, रूट मीडिया नोड के लिए onLoadChildren() से शून्य नतीजा दिखाएं. ऐसा होने पर, सिस्टम पूरी स्क्रीन पर गड़बड़ी का मैसेज दिखाता है. यह मैसेज PlaybackStateCompat में सेट किया जाता है.

कार्रवाई की जा सकने वाली गड़बड़ियां

अगर गड़बड़ी को ठीक किया जा सकता है, तो PlaybackStateCompat में ये दो अतिरिक्त चीज़ें भी सेट करें:

  • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL: यह बटन पर क्लिक करके गड़बड़ी ठीक करने के लिए लेबल है. यह स्ट्रिंग उपयोगकर्ता को दिखती है. इसलिए, इसे उपयोगकर्ता की मौजूदा स्थानीय भाषा में बदलें.
  • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT: यह PendingIntent है, जिसे बटन, गड़बड़ी को ठीक करने के लिए चलाता है. जैसे, साइन-इन करने की गतिविधि शुरू करना.

कार्रवाई की जा सकने वाली गड़बड़ियां, Dialog के तौर पर दिखती हैं. इन्हें उपयोगकर्ता सिर्फ़ तब ठीक कर सकते हैं, जब कार रुकी हुई हो.

गड़बड़ी के मामलों की जांच करना

पुष्टि करें कि आपका ऐप्लिकेशन, सभी स्थितियों में गड़बड़ियों को ठीक से हैंडल करता हो. इनमें ये स्थितियां शामिल हैं:

  • आपके प्रॉडक्ट के अलग-अलग टियर: उदाहरण के लिए, मुफ़्त वर्सेस प्रीमियम या साइन इन वर्सेस साइन आउट
  • ड्राइविंग की अलग-अलग स्थितियां: उदाहरण के लिए, गाड़ी पार्क की गई है या चलाई जा रही है
  • कनेक्टिविटी की अलग-अलग स्थितियां: उदाहरण के लिए, ऑनलाइन बनाम ऑफ़लाइन

ध्यान देने वाली अन्य बातें

Android Automotive OS ऐप्लिकेशन डेवलप करते समय, इन बातों का ध्यान रखें:

ऑफ़लाइन सामग्री

अगर लागू हो, तो ऑफ़लाइन चलाने की सुविधा लागू करें. Android Automotive OS वाली कारों में, डेटा कनेक्टिविटी की सुविधा पहले से मौजूद होती है. इसका मतलब है कि वाहन की कीमत में डेटा प्लान शामिल होता है या उपयोगकर्ता को इसके लिए अलग से पेमेंट करना पड़ता है. हालांकि, कारों में मोबाइल डिवाइसों की तुलना में कनेक्टिविटी के ज़्यादा विकल्प होने चाहिए.

ऑफ़लाइन सहायता से जुड़ी रणनीति बनाते समय, इन बातों का ध्यान रखें:

  • कॉन्टेंट डाउनलोड करने का सबसे सही समय तब होता है, जब ऐप्लिकेशन इस्तेमाल किया जा रहा हो.
  • यह न मान लें कि वाई-फ़ाई की सुविधा उपलब्ध है. ऐसा हो सकता है कि कार कभी वाई-फ़ाई की रेंज में न आए या ओईएम ने मोबाइल नेटवर्क के लिए वाई-फ़ाई की सुविधा बंद कर दी हो.
  • हालांकि, उपयोगकर्ताओं के इस्तेमाल किए जाने वाले कॉन्टेंट को कैश मेमोरी में सेव किया जा सकता है, लेकिन हमारा सुझाव है कि आप उपयोगकर्ताओं को सेटिंग में जाकर, इस सुविधा को बदलने का विकल्प दें.
  • कारों में डिस्क स्पेस अलग-अलग होता है. इसलिए, उपयोगकर्ताओं को ऑफ़लाइन कॉन्टेंट मिटाने का विकल्प दें. जैसे, सेटिंग गतिविधि में कोई विकल्प देकर.

WebView के साथ काम करता है

Android Automotive OS में WebViews काम करते हैं. हालांकि, इनका इस्तेमाल सिर्फ़ सेटिंग और साइन-इन करने के लिए किया जा सकता है. WebView का इस्तेमाल करने वाली ऐक्टिविटी में, WebView के बाहर "बंद करें" या "वापस जाएं" अफ़ोर्डेंस होना चाहिए.

यहां WebViews के इस्तेमाल के कुछ ऐसे उदाहरण दिए गए हैं जिन्हें स्वीकार किया जा सकता है:

  • सेटिंग में की गई गतिविधि में, निजता नीति, सेवा की शर्तों या कानूनी मामलों से जुड़े अन्य लिंक दिखाना.
  • साइन-इन करने की आपकी गतिविधि में वेब-आधारित फ़्लो.

WebView का इस्तेमाल करते समय, JavaScript चालू की जा सकती है.

अपने वेबव्यू को सुरक्षित करना

यह पक्का करने के लिए कि आपका WebView, इंटरनेट के ज़्यादा बड़े हिस्से में एंट्री पॉइंट न हो, सभी ज़रूरी सावधानियां बरतें. loadUrl() कॉल में इस्तेमाल किए गए यूआरएल पर WebView को लॉक करने और रीडायरेक्ट को रोकने के तरीके का उदाहरण देखने के लिए, यहां दिया गया कोड स्निपेट देखें. हमारा सुझाव है कि जब भी मुमकिन हो, तब इस तरह के सुरक्षा उपाय लागू करें. जैसे, कानूनी मामलों से जुड़े लिंक दिखाते समय.

Kotlin

override fun shouldOverrideUrlLoading(webView: WebView,
                             webResourceRequest: WebResourceRequest): Boolean {
  val originalUri: Uri = Uri.parse(webView.originalUrl)
  // Check for allowed URLs
  if (originalUri.equals(Uri.parse(BLANK_URL))
      || originalUri.equals(webResourceRequest.url)) {
    return false
  }
  if (webResourceRequest.isRedirect) {
    logger.w("Redirect detected, not following")
    return true
  }
  setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.url)
  logger.w(
    String.format(
      "Navigation prevented to %s original is %s", webResourceRequest.url, originalUri))
  return true
}

Java

@Override
public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
  Uri originalUri = Uri.parse(webView.getOriginalUrl());
  // Check for allowed URLs
  if (originalUri.equals(Uri.parse(BLANK_URL))
      || originalUri.equals(webResourceRequest.getUrl())) {
    return false;
  }
  if (webResourceRequest.isRedirect()) {
    logger.w("Redirect detected, not following");
    return true;
  }
  setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.getUrl());
  logger.w(
      String.format(
          "Navigation prevented to %s original is %s", webResourceRequest.getUrl(), originalUri));
  return true;
}

पैकेज के नाम

Android Automotive OS के लिए, अलग Android पैकेज किट (APK) डिस्ट्रिब्यूट की जाती है. इसलिए, अपने मोबाइल ऐप्लिकेशन के पैकेज के नाम का फिर से इस्तेमाल किया जा सकता है या पैकेज का नया नाम बनाया जा सकता है. अगर पैकेज के अलग नाम का इस्तेमाल किया जाता है, तो आपके ऐप्लिकेशन की Play Store पर दो अलग-अलग लिस्टिंग होंगी. अगर मौजूदा पैकेज के नाम का दोबारा इस्तेमाल किया जाता है, तो आपके ऐप्लिकेशन की एक ही लिस्टिंग दोनों प्लैटफ़ॉर्म पर दिखेगी.

यह फ़ैसला मुख्य रूप से कारोबार के हिसाब से लिया जाता है. उदाहरण के लिए, अगर आपकी एक टीम मोबाइल ऐप्लिकेशन पर काम कर रही है और दूसरी टीम Android Automotive OS ऐप्लिकेशन पर काम कर रही है, तो पैकेज के अलग-अलग नाम इस्तेमाल करना सही हो सकता है. साथ ही, हर टीम को अपनी Play Store लिस्टिंग मैनेज करने की अनुमति देना भी सही हो सकता है. दोनों तरीकों को इस्तेमाल करने के लिए, तकनीकी तौर पर ज़्यादा मेहनत करने की ज़रूरत नहीं होती.

यहां दी गई टेबल में, मौजूदा पैकेज का नाम बनाए रखने और नया पैकेज का नाम इस्तेमाल करने के बीच के कुछ अन्य मुख्य अंतरों के बारे में बताया गया है:

सुविधा एक ही पैकेज का नाम नए पैकेज का नाम
स्टोर पेज अविवाहित कई
मिरर किया गया इंस्टॉल हां: सेटअप विज़र्ड के दौरान "ऐप्लिकेशन को तेज़ी से फिर से इंस्टॉल करने की सुविधा" नहीं
Play Store पर समीक्षा करने की प्रोसेस समीक्षाएं ब्लॉक करना: अगर कोई समीक्षा किसी एक APK के लिए ज़रूरी शर्तें पूरी नहीं करती है, तो उसी रिलीज़ में सबमिट किए गए अन्य APK ब्लॉक कर दिए जाते हैं अलग-अलग समीक्षाएं
आंकड़े, मेट्रिक, और वाइटल कंबाइंड: इसमें, वाहन से जुड़ा डेटा फ़िल्टर किया जा सकता है. अलग करें
इंडेक्स करना और खोज नतीजों में रैंकिंग मौजूदा स्थिति के आधार पर रणनीति बनाना बचे हुए डेटा को अगले महीने इस्तेमाल नहीं किया जा सकता
अन्य ऐप्लिकेशन के साथ इंटिग्रेट करना अगर दोनों APK के बीच मीडिया कोड शेयर किया जाता है, तो शायद कोई बदलाव करने की ज़रूरत नहीं है आपको इससे जुड़े ऐप्लिकेशन को अपडेट करना पड़ सकता है. जैसे, Google Assistant की मदद से यूआरआई चलाने के लिए.

अक्सर पूछे जाने वाले सवाल

Android Automotive OS के बारे में अक्सर पूछे जाने वाले कुछ सवालों के जवाब पाने के लिए, यहां दिए गए सेक्शन देखें.

हार्डवेयर

क्या मेरा ऐप्लिकेशन माइक्रोफ़ोन को ऐक्सेस कर सकता है

Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, ऑडियो इनपुट शेयर करने से जुड़ा दस्तावेज़ देखें. एपीआई लेवल 29 से पहले, ऐसा नहीं किया जा सकता.

हमें कार के किन एपीआई का ऐक्सेस मिल सकता है और कैसे?

आपके पास सिर्फ़ उन एपीआई का ऐक्सेस होता है जिन्हें ओईएम ने उपलब्ध कराया है. इन एपीआई को ऐक्सेस करने के तरीके को स्टैंडर्ड बनाने के लिए प्रोसेस तैयार की जा रही हैं.

ऐप्लिकेशन, CarPropertyManager में SetProperty() और GetProperty() का इस्तेमाल करके, कार के एपीआई ऐक्सेस कर सकते हैं. उपलब्ध सभी प्रॉपर्टी की सूची देखने के लिए, सोर्स कोड या रेफ़रंस दस्तावेज़ देखें. अगर प्रॉपर्टी को एनोटेट किया गया है और उस पर @SystemApi का निशान लगा है, तो इसका मतलब है कि यह सुविधा सिर्फ़ पहले से लोड किए गए सिस्टम ऐप्लिकेशन के लिए उपलब्ध है.

किस तरह के ऑडियो कोडेक इस्तेमाल किए जा सकते हैं?

Android CDD में, ऑडियो कोडेक की जानकारी देखें.

क्या Widevine DRM काम करता है?

हां. Widevine DRM काम करता है.

डेवलपमेंट और टेस्टिंग

क्या तीसरे पक्ष के एसडीके और लाइब्रेरी इस्तेमाल करने के लिए, कोई पाबंदी या सुझाव है?

तीसरे पक्ष के एसडीके और लाइब्रेरी इस्तेमाल करने के बारे में, हमारे पास कोई खास दिशा-निर्देश नहीं हैं. अगर तीसरे पक्ष के एसडीके टूल और लाइब्रेरी का इस्तेमाल किया जाता है, तो भी कार ऐप्लिकेशन की क्वालिटी से जुड़ी सभी ज़रूरी शर्तों का पालन करना आपकी ज़िम्मेदारी है.

क्या फ़ोरग्राउंड सेवा का इस्तेमाल किया जा सकता है?

फ़ोरग्राउंड सेवा का इस्तेमाल सिर्फ़ ऑफ़लाइन इस्तेमाल के लिए कॉन्टेंट डाउनलोड करने के लिए किया जा सकता है. अगर आपको फ़ोरग्राउंड सेवा के किसी अन्य इस्तेमाल के बारे में जानना है, तो Android Automotive OS के डिसकशन ग्रुप का इस्तेमाल करके हमसे संपर्क करें.

Android Automotive OS ऐप्लिकेशन पब्लिश करना

मैं Google Play Console का इस्तेमाल करके, Android Automotive OS ऐप्लिकेशन को कैसे पब्लिश करूं?

Google Play Console का इस्तेमाल करके, Android Automotive OS ऐप्लिकेशन को पब्लिश करने के तरीके के बारे में जानने के लिए, कारों के लिए ऐप्लिकेशन उपलब्ध कराना लेख पढ़ें.

अन्य संसाधन

Android Automotive OS के बारे में ज़्यादा जानने के लिए, यहां दिए गए अन्य संसाधन देखें.

सैंपल

गाइड

ब्लॉग

वीडियो

Android Automotive OS में मीडिया से जुड़ी किसी समस्या की शिकायत करना

अगर आपको Android Automotive OS के लिए मीडिया ऐप्लिकेशन डेवलप करते समय कोई समस्या आती है, तो Google Issue Tracker का इस्तेमाल करके इसकी शिकायत की जा सकती है. समस्या के टेंप्लेट में मांगी गई पूरी जानकारी भरें.

नई समस्या दर्ज करने का तरीका

नई समस्या की शिकायत करने से पहले, देखें कि क्या वह समस्या पहले से ही समस्याओं की सूची में मौजूद है. ट्रैकर में किसी समस्या के लिए स्टार पर क्लिक करके, उसकी सदस्यता ली जा सकती है और उसके लिए वोट किया जा सकता है. ज़्यादा जानकारी के लिए, किसी समस्या को सब्सक्राइब करना लेख पढ़ें.