अपने मीडिया ऐप्लिकेशन में 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 में, फ़ाइल > नया > नया मॉड्यूल पर क्लिक करें.
  2. वाहन संबंधित मॉड्यूल चुनें. इसके बाद, आगे बढ़ें पर क्लिक करें.
  3. ऐप्लिकेशन/लाइब्रेरी का नाम डालें. यह वह नाम है जो उपयोगकर्ताओं को Android Automotive OS पर आपके ऐप्लिकेशन के लिए दिखता है.
  4. मॉड्यूल का नाम डालें.
  5. अपने ऐप्लिकेशन से मैच करने के लिए, पैकेज का नाम बदलें.
  6. कम से कम SDK टूल के लिए, एपीआई 28: Android 9.0 (Pie) चुनें. इसके बाद, आगे बढ़ें पर क्लिक करें.

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

  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" एट्रिब्यूट को सेट करें और नीचे दिए गए 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 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

Groovy

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 का इस्तेमाल करके आपकी सेटिंग और साइन-इन गतिविधियों के साथ कैसे इंटरैक्ट करता है:

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

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

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

यह पक्का करने के लिए कि आपकी सेटिंग और/या साइन-इन गतिविधियां सिर्फ़ तब इस्तेमाल की जा सकें, जब उपयोगकर्ता का वाहन पार्क किया गया हो, तो पुष्टि करें कि <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 सेटिंग के बारे में जानकारी देने वाली गाइड पढ़ें.

सेटिंग गतिविधि को लागू करते समय, प्राथमिकता लाइब्रेरी के कुछ कॉम्पोनेंट का इस्तेमाल करने के लिए, ये सबसे सही तरीके अपनाएं:

  • सेटिंग गतिविधि में मुख्य व्यू के नीचे, दो से ज़्यादा लेवल न हों.
  • 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() तरीके में, null नतीजा भेजने के लिए, sendResult() तरीके का इस्तेमाल करें.
  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 से जुड़े बटन पर टैप करता है.

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

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 Authentication जैसे कुछ टूल, फ़ुल-स्टैक टूलकिट उपलब्ध कराते हैं. इनकी मदद से, पुष्टि करने के अनुभव को पसंद के मुताबिक बनाया जा सकता है. अन्य टूल, उपयोगकर्ता के मौजूदा क्रेडेंशियल या अन्य टेक्नोलॉजी का इस्तेमाल करते हैं. इससे, उपयोगकर्ताओं के लिए साइन-इन करने का बेहतर अनुभव देने में मदद मिलती है.

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

  • एक टैप से साइन इन और साइन अप करने की सुविधा: अगर आपने अपने फ़ोन ऐप्लिकेशन जैसे अन्य डिवाइसों के लिए, एक टैप की सुविधा पहले से लागू कर दी है, तो Android Automotive OS ऐप्लिकेशन के लिए भी इसे लागू करें. इससे, एक टैप से साइन इन करने की सुविधा का इस्तेमाल करने वाले मौजूदा उपयोगकर्ताओं को मदद मिलेगी.
  • 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 का इस्तेमाल करना होगा:

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

अनुमतियां

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

मीडिया होस्ट से जुड़े सुझाव पढ़ें

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

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

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 वाली कारों में, डेटा कनेक्शन की सुविधा पहले से मौजूद हो सकती है. इसका मतलब है कि वाहन की कीमत में डेटा प्लान शामिल है या उपयोगकर्ता ने इसके लिए पैसे चुकाए हैं. हालांकि, मोबाइल डिवाइसों की तुलना में कारों में कनेक्टिविटी के ज़्यादा विकल्प होने की उम्मीद है.

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

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

वेबव्यू के लिए सहायता

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

वेबव्यू के इस्तेमाल के कुछ उदाहरण यहां दिए गए हैं:

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

वेबव्यू का इस्तेमाल करते समय, JavaScript को चालू किया जा सकता है.

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

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

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 Package Kit (APK) डिस्ट्रिब्यूट किया जाता है. इसलिए, अपने मोबाइल ऐप्लिकेशन के पैकेज के नाम का फिर से इस्तेमाल किया जा सकता है या नया पैकेज नाम बनाया जा सकता है. अगर पैकेज के लिए कोई दूसरा नाम इस्तेमाल किया जाता है, तो आपके ऐप्लिकेशन के लिए Play Store पर दो अलग-अलग लिस्टिंग बनाई जाती हैं. अगर मौजूदा पैकेज के नाम का फिर से इस्तेमाल किया जाता है, तो आपके ऐप्लिकेशन की एक ही लिस्टिंग, दोनों प्लैटफ़ॉर्म पर दिखेगी.

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

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

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

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

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

हार्डवेयर

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

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

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

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

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

किस तरह के ऑडियो कोडेक काम करते हैं?

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

क्या Widevine डीआरएम काम करता है?

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

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

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

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

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

फ़ोरग्राउंड सेवा का इस्तेमाल सिर्फ़ ऑफ़लाइन इस्तेमाल के लिए कॉन्टेंट डाउनलोड करने के लिए किया जा सकता है. अगर आपको फ़ोरग्राउंड सेवा के लिए कोई दूसरा इस्तेमाल-उदाहरण चाहिए, जिसके लिए आपको सहायता चाहिए, तो 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 समस्या ट्रैकर का इस्तेमाल करके इसकी शिकायत की जा सकती है. समस्या के टेंप्लेट में, मांगी गई सभी जानकारी ज़रूर भरें.

नई समस्या बनाना

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