टीवी डिवाइसों को ऐप्लिकेशन के साथ इंटरैक्ट करने के लिए, सेकंडरी हार्डवेयर डिवाइस की ज़रूरत होती है. जैसे, बेसिक रिमोट कंट्रोलर, पॉइंटर रिमोट या गेम कंट्रोलर. उपयोगकर्ताओं को एक जैसा अनुभव देने के लिए, आपके ऐप्लिकेशन में डायरेक्शनल पैड (डी-पैड) इनपुट की सुविधा होनी चाहिए. साथ ही, ऑफ़लाइन होने वाले कंट्रोलर को मैनेज करने और पॉइंटर रिमोट के साथ-साथ कई तरह के कंट्रोलर से इनपुट लेने की सुविधा होनी चाहिए.
डी-पैड के कम से कम कंट्रोल
टीवी डिवाइस के लिए डिफ़ॉल्ट कंट्रोलर, डी-पैड होता है. आम तौर पर, आपका ऐप्लिकेशन ऐसे रिमोट कंट्रोलर से काम करना चाहिए जिसमें सिर्फ़ ऊपर, नीचे, बाएं, दाएं, चुनें, वापस जाएं, और होम बटन हों. अगर आपका ऐप्लिकेशन एक ऐसा गेम है जिसके लिए आम तौर पर अतिरिक्त कंट्रोल वाले गेम कंट्रोलर की ज़रूरत होती है, तो सिर्फ़ इन डी-पैड कंट्रोल के साथ गेमप्ले को सपोर्ट करने की कोशिश करें. अगर ऐसा नहीं है, तो उपयोगकर्ता को चेतावनी दें कि गेम खेलने के लिए कंट्रोलर की ज़रूरत है. साथ ही, उसे डी-पैड कंट्रोलर का इस्तेमाल करके, गेम से आसानी से बाहर निकलने दें.
टीवी डिवाइसों के लिए, डी-पैड कंट्रोलर की मदद से नेविगेट करने के बारे में ज़्यादा जानने के लिए, टीवी नेविगेशन देखें.
कंट्रोलर के डिसकनेक्ट होने की समस्या को ठीक करना
टीवी के लिए कंट्रोलर अक्सर ब्लूटूथ डिवाइस होते हैं. ये समय-समय पर स्लीप मोड में जाकर और टीवी डिवाइस से डिसकनेक्ट होकर, बैटरी बचाने की कोशिश कर सकते हैं. इसका मतलब है कि अगर किसी ऐप्लिकेशन को फिर से कनेक्ट करने वाले इन इवेंट को मैनेज करने के लिए कॉन्फ़िगर नहीं किया गया है, तो हो सकता है कि वह ऐप्लिकेशन बीच में ही बंद हो जाए या रीस्टार्ट हो जाए. ये इवेंट, इनमें से किसी भी स्थिति में हो सकते हैं:
- कई मिनट लंबे वीडियो के चलने के दौरान, डी-पैड या गेम कंट्रोलर स्लीप मोड में जा सकता है. साथ ही, टीवी डिवाइस से डिसकनेक्ट हो सकता है और बाद में फिर से कनेक्ट हो सकता है.
- गेमप्ले के दौरान, कोई नया खिलाड़ी ऐसे गेम कंट्रोलर का इस्तेमाल करके गेम में शामिल हो सकता है जो पहले से कनेक्ट नहीं है.
- गेमप्ले के दौरान, कोई खिलाड़ी गेम छोड़ सकता है और गेम कंट्रोलर को डिसकनेक्ट कर सकता है.
टीवी ऐप्लिकेशन की ऐसी किसी भी गतिविधि को ऐप्लिकेशन मेनिफ़ेस्ट में फिर से कनेक्ट करने के इवेंट को मैनेज करने के लिए कॉन्फ़िगर किया जाना चाहिए जो डिसकनेक्ट और फिर से कनेक्ट करने के इवेंट के दायरे में आती है. यहां दिए गए कोड सैंपल में, कॉन्फ़िगरेशन में होने वाले बदलावों को मैनेज करने के लिए, किसी गतिविधि को चालू करने का तरीका बताया गया है. इसमें कीबोर्ड या नेविगेशन डिवाइस को कनेक्ट करना, डिसकनेक्ट करना या फिर से कनेक्ट करना शामिल है:
<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 फ़्रेमवर्क को ऐप्लिकेशन को रीस्टार्ट करने की ज़रूरत नहीं पड़ती. ऐप्लिकेशन को रीस्टार्ट करने से, उपयोगकर्ता अनुभव खराब होता है.
डी-पैड इनपुट के वैरिएशन मैनेज करना
टीवी डिवाइस का इस्तेमाल करने वाले लोगों के पास, एक से ज़्यादा तरह के कंट्रोलर हो सकते हैं. उदाहरण के लिए, किसी उपयोगकर्ता के पास बेसिक डी-पैड कंट्रोलर, पॉइंटर रिमोट या गेम कंट्रोलर हो सकता है. डी-पैड फ़ंक्शन के लिए इस्तेमाल किए जाने पर, गेम कंट्रोलर से मिलने वाले बटन कोड, बुनियादी डी-पैड से भेजे गए बटन कोड से अलग हो सकते हैं.
डी-पैड इनपुट में होने वाले बदलावों को मैनेज करें, ताकि उपयोगकर्ता को आपका ऐप्लिकेशन इस्तेमाल करने के लिए, कंट्रोलर स्विच न करना पड़े. इनपुट में होने वाले बदलावों को मैनेज करने के बारे में ज़्यादा जानने के लिए, डायरेक्शनल पैड इनपुट को प्रोसेस करना लेख पढ़ें.
पॉइंटर वाले रिमोट के साथ काम करना
कुछ टीवी डिवाइसों में पॉइंटर रिमोट काम करते हैं. जैसे, एयर माउस या टच-सेंसिटिव डायरेक्शनल पैड (ट्रैकपैड) वाले रिमोट. पॉइंटर रिमोट की सुविधा देने से, उपयोगकर्ता आपके ऐप्लिकेशन के साथ इंटरैक्ट कर सकते हैं. इसके लिए, वे पॉइंट-ऐंड-क्लिक, कर्सर घुमाने, स्वाइप करने, और खींचकर छोड़ने जैसे जेस्चर का इस्तेमाल कर सकते हैं. इससे, उपयोगकर्ताओं को इस सुविधा के साथ काम करने वाले हार्डवेयर पर बेहतर अनुभव मिलता है. साथ ही, डी-पैड की सुविधा भी पूरी तरह से काम करती है.
मेनिफ़ेस्ट में, पॉइंटर रिमोट सपोर्ट की जानकारी दें
यह बताने के लिए कि आपके ऐप्लिकेशन को पॉइंटर और टच इनपुट से नेविगेट किया जा सकता है, अपने ऐप्लिकेशन मेनिफ़ेस्ट को कॉन्फ़िगर करें. इसके लिए, <application> एलिमेंट के अंदर android.software.leanback.supports_touch
<property> को true पर सेट करें. इसके अलावा, हर गतिविधि के लिए सहायता कॉन्फ़िगर करने के लिए, अलग-अलग <activity> एलिमेंट के अंदर भी ऐसा किया जा सकता है:
<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" />
<application ...>
<!-- Signal whether the app supports pointer remotes -->
<property
android:name="android.software.leanback.supports_touch"
android:value="true" />
...
</application>
</manifest>
क्लिक, होवर, और स्क्रोल इंटरैक्शन के साथ काम करते हैं
पॉइंटर रिमोट के साथ काम करने वाले ऐप्लिकेशन बनाते समय, पक्का करें कि आपके यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट, कर्सर और टच इनपुट के हिसाब से सही तरीके से काम करें. इसके लिए, इन इंटरैक्शन का ध्यान रखें:
- क्लिक करना और चुनना: फ़ोकस किए जा सकने वाले और चुने जा सकने वाले सभी यूज़र इंटरफ़ेस (यूआई) एलिमेंट, पॉइंटर रिमोट से क्लिक किए जा सकने वाले होने चाहिए. साथ ही, वे डी-पैड (
KEYCODE_DPAD_CENTER) से चुने जा सकने वाले होने चाहिए.- Jetpack Compose:
Modifier.clickable()याpointerInputमॉडिफ़ायर का इस्तेमाल करें. ज़्यादा जानकारी के लिए, टैप करें और दबाएं देखें. - व्यू: व्यू पर क्लिक इवेंट मैनेज करें. ज़्यादा जानकारी के लिए, इनपुट इवेंट की खास जानकारी देखें.
- Jetpack Compose:
- विज़ुअल होवर स्टेट: जब पॉइंटर कर्सर को किसी आइटम पर रखा जाता है, तो होवर इफ़ेक्ट की मदद से यह साफ़ तौर पर पता चलता है कि उस आइटम को चुना जा सकता है.
- Jetpack Compose:
Modifier.hoverable()का इस्तेमाल करें याInteractionSourceका इस्तेमाल करके, कर्सर घुमाने पर दिखने वाली स्थितियों को देखें. ज़्यादा जानकारी के लिए, उपयोगकर्ता के इंटरैक्शन मैनेज करना पर जाएं. - व्यू:
android:state_hovered="true"के साथ स्टेट-लिस्ट ड्रॉएबल का इस्तेमाल करके, कर्सर घुमाने पर दिखने वाली स्थितियों को तय करें.
- Jetpack Compose:
- स्वाइप और फ़्लिंग करके स्क्रोल करना: टच-सेंसिटिव सेंटर डी-पैड बटन पर स्वाइप या फ़्लिंग जेस्चर से ट्रिगर होने वाली हॉरिज़ॉन्टल और वर्टिकल स्क्रोलिंग, स्क्रोल किए जा सकने वाले सभी कॉन्टेंट पर आसानी से काम करनी चाहिए.
- खींचकर स्क्रोल करना: उपयोगकर्ताओं को स्क्रोल किए जा सकने वाले कंटेनर में, वर्टिकल (ऊपर और नीचे) या हॉरिज़ॉन्टल (बाएं और दाएं) स्क्रोल करने के लिए, खींचने की सुविधा मिलनी चाहिए.
- 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 के सभी वर्शन पर कंट्रोलर के साथ काम करने की सुविधा देखें.
सही बटन का इस्तेमाल करना
सभी गेम कंट्रोलर में Start, Search या Menu बटन नहीं होते. पक्का करें कि आपका यूज़र इंटरफ़ेस (यूआई), इन बटन के इस्तेमाल पर निर्भर न हो.
एक से ज़्यादा कंट्रोलर मैनेज करना
जब एक से ज़्यादा खिलाड़ी कोई गेम खेल रहे हों और हर खिलाड़ी के पास अपना कंट्रोलर हो, तो हर खिलाड़ी-कंट्रोलर पेयर को मैप करना ज़रूरी है. कंट्रोलर-नंबर की पहचान करने की सुविधा को लागू करने के बारे में जानकारी के लिए, getControllerNumber() देखें.
कंट्रोलर के डिसकनेक्ट होने की समस्या को ठीक करना
अगर गेमप्ले के दौरान कोई कंट्रोलर डिसकनेक्ट हो जाता है, तो गेम को रोकें और डिसकनेक्ट हुए प्लेयर को अपना कंट्रोलर फिर से कनेक्ट करने के लिए कहें.
साथ ही, डायलॉग बॉक्स में समस्या हल करने के बारे में सलाह दें. उदाहरण के लिए, खिलाड़ी को "अपना ब्लूटूथ कनेक्शन जांचें" कहें. इनपुट डिवाइस के साथ काम करने की सुविधा लागू करने के बारे में ज़्यादा जानने के लिए, कंट्रोलर की कार्रवाइयों को मैनेज करना और ब्लूटूथ की खास जानकारी देखें.
कंट्रोलर के निर्देश दिखाएं
अगर आपके गेम में गेम कंट्रोल के विज़ुअल निर्देश दिए गए हैं, तो कंट्रोलर की ऐसी इमेज का इस्तेमाल करें जिसमें ब्रैंडिंग न हो. साथ ही, उसमें सिर्फ़ Android के साथ काम करने वाले बटन शामिल हों.
Android के साथ काम करने वाले कंट्रोलर की सैंपल इमेज के लिए, Android TV गेमपैड टेंप्लेट (ZIP) डाउनलोड करें. इसमें काले बैकग्राउंड पर सफ़ेद कंट्रोलर और सफ़ेद बैकग्राउंड पर काला कंट्रोलर शामिल है. इसे PNG फ़ाइल और Adobe® Illustrator® फ़ाइल के तौर पर, इमेज 1 में दिखाया गया है.