टीवी कंट्रोलर मैनेज करें

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

डी-पैड के कम से कम कंट्रोल

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

टीवी डिवाइसों के लिए डी-पैड कंट्रोलर से नेविगेट करने के बारे में ज़्यादा जानने के लिए, टीवी नेविगेशन लेख पढ़ें.

कंट्रोलर के डिसकनेक्ट होने की समस्या ठीक की गई

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

  • कई मिनट तक चलने वाले वीडियो के दौरान, डी-पैड या गेम कंट्रोलर स्लीप मोड में जा सकता है. साथ ही, यह टीवी डिवाइस से डिसकनेक्ट हो सकता है और बाद में फिर से कनेक्ट हो सकता है.
  • गेमप्ले के दौरान, कोई नया प्लेयर ऐसे गेम कंट्रोलर का इस्तेमाल करके गेम में शामिल हो सकता है जो पहले से कनेक्ट नहीं है.
  • गेमप्ले के दौरान, कोई खिलाड़ी गेम छोड़कर गेम कंट्रोलर को डिसकनेक्ट कर सकता है.

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

<activity
  android:name="com.example.android.TvActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|navigation"
  android:theme="@style/Theme.Leanback">

  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
  </intent-filter>
  ...
</activity>

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

डी-पैड के इनपुट वैरिएशन को मैनेज करना

टीवी डिवाइस का इस्तेमाल करने वाले लोगों के पास, टीवी के साथ इस्तेमाल करने के लिए एक से ज़्यादा तरह के कंट्रोलर हो सकते हैं. उदाहरण के लिए, किसी व्यक्ति के पास बेसिक डी-पैड कंट्रोलर, पॉइंटर रिमोट या गेम कंट्रोलर हो सकता है. डी-पैड फ़ंक्शन के लिए गेम कंट्रोलर का इस्तेमाल करने पर, उससे मिले कुंजी कोड, बुनियादी डी-पैड से भेजे गए कुंजी कोड से अलग हो सकते हैं.

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

पॉइंटर रिमोट के साथ काम करता है

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

मेनिफ़ेस्ट में, पॉइंटर रिमोट कंट्रोल के लिए सहायता का एलान करें

यह बताने के लिए कि आपके ऐप्लिकेशन को पॉइंटर और टच इनपुट से नेविगेट किया जा सकता है, अपने ऐप्लिकेशन मेनिफ़ेस्ट को कॉन्फ़िगर करें. इसके लिए, android.software.leanback.supports_touch मेटाडेटा को true पर सेट करें:

<manifest ...>
    <!-- Signal whether the app is adaptive or built just for TV -->
    <uses-feature
        android:name="android.software.leanback"
        android:required="true|false" />
    <!-- Ensure the app can be installed on conventional TVs -->
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />
    <!-- Signal whether the app supports pointer remotes -->
    <meta-data
        android:name="android.software.leanback.supports_touch"
        android:value="true" />
    <application ...>
        ...
    </application>
</manifest>

क्लिक, होवर, और स्क्रोल करने जैसे इंटरैक्शन के साथ काम करते हैं

पॉइंटर रिमोट के साथ काम करने के लिए, पक्का करें कि आपके यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट, कर्सर और टच इनपुट पर सही तरीके से काम करते हों. इसके लिए, इन इंटरैक्शन का इस्तेमाल करें:

  • क्लिक करना और चुनना: फ़ोकस किए जा सकने वाले और चुने जा सकने वाले सभी यूज़र इंटरफ़ेस (यूआई) एलिमेंट पर, पॉइंटर रिमोट से क्लिक किया जा सकता है. साथ ही, डी-पैड से चुनने (KEYCODE_DPAD_CENTER) के तरीके से ही उन्हें चुना जा सकता है.
  • विज़ुअल हॉवर स्टेट: चुनने लायक आइटम पर पॉइंटर कर्सर रखने पर, साफ़ तौर पर दिखने वाला विज़ुअल हॉवर इफ़ेक्ट दें.
    • Jetpack Compose: Modifier.hoverable() का इस्तेमाल करें या InteractionSource का इस्तेमाल करके, कर्सर घुमाने की स्थितियों को मॉनिटर करें. ज़्यादा जानकारी के लिए, उपयोगकर्ता के इंटरैक्शन मैनेज करना लेख पढ़ें.
    • व्यू: state-list drawables का इस्तेमाल करके, कर्सर घुमाने की स्थितियां तय करें. इसके लिए, android:state_hovered="true" का इस्तेमाल करें.
  • स्वाइप और फ़्लिंग करके स्क्रोल करना: टच-सेंसिटिव सेंटर डी-पैड बटन पर स्वाइप या फ़्लिंग करने के जेस्चर से ट्रिगर होने वाली हॉरिज़ॉन्टल और वर्टिकल स्क्रोलिंग, स्क्रोल किए जा सकने वाले सभी कॉन्टेंट पर आसानी से काम करनी चाहिए.
  • खींचकर स्क्रोल करना: उपयोगकर्ताओं के पास, स्क्रोल किए जा सकने वाले कंटेनर में वर्टिकल (ऊपर और नीचे) या हॉरिज़ॉन्टल (बाएं और दाएं) तौर पर स्क्रोल करने के लिए, खींचने और छोड़ने की सुविधा होनी चाहिए.
    • Jetpack Compose: स्टैंडर्ड स्क्रोल किए जा सकने वाले कंटेनर, डिफ़ॉल्ट रूप से पॉइंटर और टच स्क्रोलिंग के साथ काम करते हैं. कस्टम तरीके से लागू करने के लिए, Compose में पॉइंटर इनपुट देखें.
    • व्यू: स्क्रोल किए जा सकने वाले स्टैंडर्ड व्यू में, डिफ़ॉल्ट रूप से टच करके स्क्रोल करने की सुविधा काम करती है. इनपुट को अपने हिसाब से मैनेज करने के लिए, टच और इनपुट देखें.
  • मीडिया चलाने के दौरान आगे-पीछे करना: टीवी शो और फ़िल्मों जैसे मीडिया को चलाने के दौरान, उपयोगकर्ताओं के पास मीडिया चलाने की प्रोग्रेस बार (सीक बार) से इंटरैक्ट करने की सुविधा होनी चाहिए. इसके लिए, उन्हें किसी पिछले या आने वाले टाइमस्टैंप पर जाने के लिए, पॉइंट और क्लिक करने की सुविधा मिलनी चाहिए. साथ ही, उन्हें किसी खास समय पर जाने के लिए, प्रोग्रेस बार को खींचने (स्क्रब करने) की सुविधा भी मिलनी चाहिए.

बटन इवेंट मैनेज करना

जब उपयोगकर्ता कंट्रोलर पर किसी बटन को क्लिक करता है, तो आपके ऐप्लिकेशन को KeyEvent के साथ एक इवेंट मिलता है. बटन का मकसद कोई मीडिया इवेंट हो सकता है. जैसे, चलाना, रोकना या बंद करना. इसके अलावा, यह टीवी टाइप का इवेंट भी हो सकता है. जैसे, चुनना या नेविगेट करना. उपयोगकर्ताओं को बेहतर अनुभव देने के लिए, कंट्रोलर बटन को एक जैसा व्यवहार असाइन करें.

टीवी यूज़र इंटरफ़ेस (यूआई) इवेंट

KeyEvent टाइप जनरेट करने वाले बटन को टीवी यूज़र इंटरफ़ेस (यूआई) का व्यवहार असाइन करें. इसके लिए, यहां दी गई टेबल देखें:

KeyEvent व्यवहार
KEYCODE_BUTTON_B, KEYCODE_BACK वापस जाएं
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER, KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTER चेकबॉक्स
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHT नेविगेशन

मीडिया इवेंट

जब उपयोगकर्ता मीडिया देख रहा हो, तब उन बटन को व्यवहार असाइन करें जो KeyEvent टाइप जनरेट करते हैं. इसके बारे में यहां दी गई टेबल में बताया गया है. अगर आपका ऐप्लिकेशन किसी MediaSession को कंट्रोल कर रहा है, तो टेबल में दिखाए गए MediaControllerCompat.TransportControls तरीकों में से किसी एक को कॉल करने के लिए, MediaControllerAdapter का इस्तेमाल करें. ध्यान दें कि इस संदर्भ में, चुनने के लिए दिए गए बटन, चलाने या रोकने के बटन के तौर पर काम करते हैं.

KeyEvent TransportControls कॉल व्यवहार
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER play() चलाएं
BUTTON_START, BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER pause() रोकें
BUTTON_R1 skipToNext() आगे जाएं
BUTTON_L1 skipToPrevious() पीछे जाएं
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLE fastForward() तेज़ी से आगे बढ़ाएं
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKE rewind() रिवाइंड करें
लागू नहीं stop() रोकें

'वापस जाएं' बटन के सही तरीके से काम करने की सुविधा देना

'वापस जाएं' बटन को कभी भी टॉगल के तौर पर काम नहीं करना चाहिए. उदाहरण के लिए, इसका इस्तेमाल मेन्यू को खोलने और बंद करने, दोनों के लिए न करें. इसका इस्तेमाल सिर्फ़ पीछे की ओर नेविगेट करने के लिए करें. इससे प्लेयर, पिछली स्क्रीन पर ब्रेडक्रंब स्टाइल में जा सकता है.

'वापस जाएं' बटन का इस्तेमाल सिर्फ़ एक क्रम में पीछे की ओर जाने के लिए किया जाता है. इसलिए, इसका इस्तेमाल किसी दूसरे बटन से खोले गए ऐप्लिकेशन के मेन्यू से बाहर निकलने और ऐप्लिकेशन पर वापस जाने के लिए किया जा सकता है. 'वापस जाएं' बटन को लगातार दबाने पर, हमेशा Android TV की होम स्क्रीन पर पहुंचना चाहिए. उदाहरण के लिए: गेम खेलना > गेम को रोकने वाली स्क्रीन > गेम की मुख्य स्क्रीन > Android TV की होम स्क्रीन या टीवी शो चलाना > टीवी ऐप्लिकेशन की मुख्य स्क्रीन

Android TV की होम स्क्रीन.

नेविगेशन के लिए डिज़ाइन के बारे में ज़्यादा जानने के लिए, 'वापस' और 'ऊपर' नेविगेशन डिज़ाइन करना लेख पढ़ें. इसे लागू करने के बारे में जानने के लिए, बैक नेविगेशन की सुविधा सही तरीके से उपलब्ध कराना लेख पढ़ें.

गेम के लिए कंट्रोलर मैनेज करना

Android TV के लिए गेम बनाते समय, कंट्रोल स्कीम को इस तरह से डिज़ाइन करें कि वह स्टैंडर्ड टीवी रिमोट और गेम कंट्रोलर, दोनों के साथ काम करे.

डी-पैड कंट्रोल की सुविधा

डी-पैड कंट्रोल के हिसाब से कंट्रोल स्कीम प्लान करें, क्योंकि यह कंट्रोल सेट Android TV डिवाइसों के लिए डिफ़ॉल्ट होता है. गेम के हर पहलू के लिए, प्लेयर को डी-पैड का इस्तेमाल करने की सुविधा मिलनी चाहिए. जैसे, गेमप्ले को कंट्रोल करने के साथ-साथ मेन्यू और विज्ञापनों पर नेविगेट करना. इसलिए, पक्का करें कि आपके Android TV गेम में, टच इंटरफ़ेस का इस्तेमाल न किया गया हो. जैसे, "जारी रखने के लिए यहाँ टैप करें."

गेम खेलने वाले व्यक्ति को कंट्रोलर के साथ इंटरैक्ट करने का कैसा अनुभव मिलता है, यह उपयोगकर्ता को बेहतर अनुभव देने के लिए अहम हो सकता है. इन सबसे सही तरीकों को अपनाने के बारे में सोचें:

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

सही बटन इस्तेमाल करना

सभी गेम कंट्रोलर में, स्टार्ट, खोज या मेन्यू बटन नहीं होते हैं. पक्का करें कि आपका यूज़र इंटरफ़ेस (यूआई), इन बटन के इस्तेमाल पर निर्भर न हो.

एक से ज़्यादा कंट्रोलर मैनेज करना

जब एक से ज़्यादा खिलाड़ी किसी गेम को अपने-अपने कंट्रोलर से खेल रहे हों, तो हर खिलाड़ी-कंट्रोलर पेयर को मैप करना ज़रूरी है. कंट्रोलर-नंबर की पहचान करने की सुविधा लागू करने के बारे में जानकारी पाने के लिए, getControllerNumber() लेख पढ़ें.

कंट्रोलर के डिसकनेक्ट होने की समस्या ठीक की गई

अगर गेमप्ले के दौरान कंट्रोलर डिसकनेक्ट हो जाता है, तो गेम को रोकें. साथ ही, डिसकनेक्ट हुए प्लेयर को कंट्रोलर फिर से कनेक्ट करने के लिए प्रॉम्प्ट करने वाला डायलॉग बॉक्स दिखाएं.

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

कंट्रोलर के इस्तेमाल से जुड़े निर्देश दिखाएं

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

Android के साथ काम करने वाले कंट्रोलर की सैंपल इमेज के लिए, Android TV गेमपैड टेंप्लेट (ZIP) डाउनलोड करें. इसमें काले रंग के बैकग्राउंड पर सफ़ेद कंट्रोलर और सफ़ेद रंग के बैकग्राउंड पर काले रंग का कंट्रोलर शामिल है. इसे पीएनजी फ़ाइल और Adobe® Illustrator® फ़ाइल के तौर पर दिखाया गया है.

**पहली इमेज.** Android TV गेमपैड टेंप्लेट का इस्तेमाल करके, कंट्रोलर के निर्देशों का उदाहरण.