टीवी का हार्डवेयर, अन्य Android डिवाइसों से काफ़ी अलग होता है. टीवी में कुछ ऐसी हार्डवेयर सुविधाएं नहीं होती हैं जो अन्य Android डिवाइसों में मिलती हैं. जैसे, टचस्क्रीन, कैमरा, और जीपीएस रिसीवर. टीवी भी पूरी तरह से सेकंडरी हार्डवेयर डिवाइसों पर निर्भर होते हैं: टीवी ऐप्लिकेशन के साथ इंटरैक्ट करने के लिए, उपयोगकर्ताओं को रिमोट कंट्रोल या गेम पैड का इस्तेमाल करना होगा. (इनपुट के अलग-अलग तरीकों के बारे में जानने के लिए, टीवी कंट्रोलर मैनेज करना लेख पढ़ें.)
टीवी के लिए ऐप्लिकेशन बनाते समय, टीवी हार्डवेयर की सीमाओं और ज़रूरी शर्तों का ध्यान रखें. यह देखना कि आपका ऐप्लिकेशन टीवी पर चल रहा है या नहीं. साथ ही, हार्डवेयर की उन सुविधाओं को मैनेज करना जो काम नहीं करतीं.
टीवी डिवाइस का पता लगाना
अगर आपको ऐसा ऐप्लिकेशन बनाना है जो टीवी और अन्य डिवाइसों, दोनों पर काम करे, तो आपको यह देखना होगा कि आपका ऐप्लिकेशन किस तरह के डिवाइस पर चल रहा है. साथ ही, आपको ऐप्लिकेशन के काम करने के तरीके में बदलाव करना होगा. उदाहरण के लिए, अगर आपके पास कोई ऐसा ऐप्लिकेशन है जिसे Intent से शुरू किया जा सकता है, तो डिवाइस की प्रॉपर्टी देखकर यह तय करें कि टीवी के हिसाब से कोई गतिविधि शुरू करनी है या फ़ोन के हिसाब से.
यह पता लगाने के लिए कि आपका ऐप्लिकेशन किसी टीवी डिवाइस पर चल रहा है या नहीं, PackageManager.hasSystemFeature तरीके का इस्तेमाल करें. इससे यह पता चलता है कि डिवाइस, टेलीविज़न मोड में चल रहा है या नहीं. यहां दिए गए उदाहरण कोड से पता चलता है कि आपका ऐप्लिकेशन टीवी डिवाइस पर चल रहा है या नहीं:
Kotlin
const val TAG = "DeviceTypeRuntimeCheck" val isTelevision = packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK) if (isTelevision) { Log.d(TAG, "Running on a TV Device") } else { Log.d(TAG, "Running on a non-TV Device") }
Java
public static final String TAG = "DeviceTypeRuntimeCheck"; boolean isTelevision = getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK); if (isTelevision) { Log.d(TAG, "Running on a TV Device"); } else { Log.d(TAG, "Running on a non-TV Device"); }
हार्डवेयर की ऐसी सुविधाएं जो काम नहीं करतीं
आपके ऐप्लिकेशन के डिज़ाइन और फ़ंक्शन के आधार पर, हो सकता है कि आप हार्डवेयर की कुछ सुविधाओं के उपलब्ध न होने पर भी काम कर पाएं. इस सेक्शन में बताया गया है कि आम तौर पर टीवी के लिए कौनसी हार्डवेयर सुविधाएं उपलब्ध नहीं होती हैं, मौजूद न होने वाली हार्डवेयर सुविधाओं का पता कैसे लगाया जाता है, और इन सुविधाओं के लिए कौनसे विकल्प सुझाए जाते हैं.
टीवी के हार्डवेयर की ऐसी सुविधाएं जो काम नहीं करतीं
टीवी का इस्तेमाल अन्य डिवाइसों से अलग होता है. इसलिए, इनमें ऐसी हार्डवेयर सुविधाएं नहीं होती हैं जो Android की मदद से काम करने वाले अन्य डिवाइसों में अक्सर होती हैं. इसी वजह से, Android सिस्टम, टीवी डिवाइस के लिए इन सुविधाओं के साथ काम नहीं करता:
| हार्डवेयर | Android की सुविधा के बारे में जानकारी देने वाला एलिमेंट |
|---|---|
| टचस्क्रीन | android.hardware.touchscreen |
| टचस्क्रीन एम्युलेटर | android.hardware.faketouch |
| टेलीफ़ोनी | android.hardware.telephony |
| कैमरा | android.hardware.camera |
| नियर फ़ील्ड कम्यूनिकेशन (एनएफ़सी) | android.hardware.nfc |
| जीपीएस | android.hardware.location.gps |
| माइक्रोफ़ोन | android.hardware.microphone |
| सेंसर | android.hardware.sensor |
| पोर्ट्रेट ओरिएंटेशन में स्क्रीन | android.hardware.screen.portrait |
ध्यान दें: कुछ टीवी कंट्रोलर में माइक्रोफ़ोन होता है. यह यहां बताई गई माइक्रोफ़ोन हार्डवेयर सुविधा से अलग होता है. कंट्रोलर के माइक्रोफ़ोन का इस्तेमाल किया जा सकता है.
सुविधाओं, सब-फ़ीचर, और उनके ब्यौरे की पूरी सूची देखने के लिए, सुविधाओं का रेफ़रंस देखें.
टीवी के लिए हार्डवेयर से जुड़ी ज़रूरी शर्तें बताना
Android ऐप्लिकेशन, ऐप्लिकेशन मेनिफ़ेस्ट में हार्डवेयर की ज़रूरी सुविधाओं के बारे में बता सकते हैं. इससे यह पक्का करने में मदद मिलती है कि वे उन डिवाइसों पर इंस्टॉल न हों जिनमें ये सुविधाएं नहीं हैं. अगर किसी मौजूदा ऐप्लिकेशन को टीवी पर इस्तेमाल करने के लिए उपलब्ध कराया जा रहा है, तो अपने ऐप्लिकेशन के मेनिफ़ेस्ट की बारीकी से समीक्षा करें. इससे आपको हार्डवेयर से जुड़ी ज़रूरी शर्तों के बारे में पता चलेगा. ऐसा हो सकता है कि इन शर्तों को पूरा न करने की वजह से, ऐप्लिकेशन को टीवी पर इंस्टॉल न किया जा सके.
अगर आपका ऐप्लिकेशन, टचस्क्रीन या कैमरे जैसी हार्डवेयर सुविधाओं का इस्तेमाल करता है, लेकिन ये सुविधाएं टीवी पर उपलब्ध नहीं हैं, तो अपने ऐप्लिकेशन के मेनिफ़ेस्ट में बदलाव करें. इससे यह पता चलता है कि आपके ऐप्लिकेशन को इन सुविधाओं की ज़रूरत नहीं है. मेनिफ़ेस्ट कोड का यह स्निपेट दिखाता है कि यह कैसे एलान किया जाए कि आपके ऐप्लिकेशन को ऐसी हार्डवेयर सुविधाओं की ज़रूरत नहीं है जो टीवी डिवाइसों पर उपलब्ध नहीं हैं. हालांकि, वह टीवी के अलावा अन्य डिवाइसों पर उन सुविधाओं का इस्तेमाल करता है:
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/> <uses-feature android:name="android.hardware.faketouch" android:required="false"/> <uses-feature android:name="android.hardware.telephony" android:required="false"/> <uses-feature android:name="android.hardware.camera" android:required="false"/> <uses-feature android:name="android.hardware.nfc" android:required="false"/> <uses-feature android:name="android.hardware.location.gps" android:required="false"/> <uses-feature android:name="android.hardware.microphone" android:required="false"/> <uses-feature android:name="android.hardware.sensor" android:required="false"/> <!-- Some TV devices have an ethernet connection only --> <uses-feature android:name="android.hardware.wifi" android:required="false"/>
ध्यान दें: कुछ सुविधाओं में सब-फ़ंक्शन होते हैं, जैसे कि android.hardware.camera.front. इनके बारे में
सुविधाओं के रेफ़रंस में बताया गया है. अपने ऐप्लिकेशन में इस्तेमाल की गई किसी भी सब-सुविधा को required="false" के तौर पर मार्क करना न भूलें.
टीवी डिवाइसों पर इस्तेमाल किए जाने वाले सभी ऐप्लिकेशन के लिए, यह एलान करना ज़रूरी है कि उन्हें टचस्क्रीन की सुविधा की ज़रूरत नहीं है. इस बारे में, टीवी ऐप्लिकेशन का इस्तेमाल शुरू करने का तरीका में बताया गया है. अगर आपका ऐप्लिकेशन आम तौर पर एक या उससे ज़्यादा ऐसी सुविधाओं का इस्तेमाल करता है जो टीवी डिवाइसों पर काम नहीं करती हैं, तो अपने मेनिफ़ेस्ट में उन सुविधाओं के लिए, android:required एट्रिब्यूट की सेटिंग को false में बदलें.
चेतावनी: हार्डवेयर की किसी सुविधा को ज़रूरी के तौर पर एलान करने के लिए, उसकी वैल्यू को true पर सेट करें. इससे आपके ऐप्लिकेशन को टीवी डिवाइसों पर इंस्टॉल होने या Android TV की होम स्क्रीन के लॉन्चर में दिखने से रोका जा सकता है.
हार्डवेयर की सुविधाओं से जुड़ी अनुमतियों के बारे में जानकारी
मेनिफ़ेस्ट में किए गए कुछ uses-permission
एलान, हार्डवेयर की सुविधाओं के बारे में बताते हैं. इसका मतलब है कि अगर आपके ऐप्लिकेशन मेनिफ़ेस्ट में कुछ अनुमतियों का अनुरोध किया जाता है, तो हो सकता है कि आपका ऐप्लिकेशन टीवी डिवाइसों पर इंस्टॉल और इस्तेमाल न किया जा सके. आम तौर पर मांगी जाने वाली ये अनुमतियां, हार्डवेयर की सुविधा की ज़रूरी शर्त बनाती हैं:
| अनुमति | इंप्लाइड हार्डवेयर फ़ीचर |
|---|---|
RECORD_AUDIO |
android.hardware.microphone |
CAMERA |
android.hardware.camera और android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION |
|
ACCESS_FINE_LOCATION |
|
ACCESS_WIFI_STATECHANGE_WIFI_STATE
|
कुछ टीवी डिवाइसों में सिर्फ़ ईथरनेट कनेक्शन होता है. |
अनुमति के उन अनुरोधों की पूरी सूची देखने के लिए जिनमें हार्डवेयर की सुविधा की ज़रूरत होती है,
uses-feature
गाइड देखें. अगर आपका ऐप्लिकेशन, पहले बताई गई सुविधाओं में से किसी एक के लिए अनुरोध करता है, तो अपने मेनिफ़ेस्ट में uses-feature एलान शामिल करें. इससे पता चलेगा कि हार्डवेयर की सुविधा ज़रूरी नहीं है. android:required="false".
ध्यान दें: अगर आपका ऐप्लिकेशन, Android 5.0 (एपीआई लेवल 21) या इसके बाद के वर्शन को टारगेट करता है और ACCESS_COARSE_LOCATION या ACCESS_FINE_LOCATION अनुमति का इस्तेमाल करता है, तो उपयोगकर्ता अब भी आपके ऐप्लिकेशन को टीवी डिवाइस पर इंस्टॉल कर सकते हैं. भले ही, टीवी डिवाइस में नेटवर्क कार्ड या जीपीएस रिसीवर न हो.
अपने ऐप्लिकेशन के लिए हार्डवेयर सुविधाओं को वैकल्पिक बनाने के बाद, आपको रनटाइम के दौरान उन सुविधाओं की उपलब्धता की जांच करनी होगी. इसके बाद, अपने ऐप्लिकेशन के काम करने के तरीके में बदलाव करना होगा. अगले सेक्शन में, हार्डवेयर की सुविधाओं की जांच करने का तरीका बताया गया है. साथ ही, आपके ऐप्लिकेशन के काम करने के तरीके को बदलने के कुछ तरीके भी बताए गए हैं.
मेनिफ़ेस्ट में सुविधाओं को फ़िल्टर करने और एलान करने के बारे में ज़्यादा जानकारी के लिए,
uses-feature
गाइड देखें.
हार्डवेयर की सुविधाओं की जांच करना
Android फ़्रेमवर्क आपको बता सकता है कि जिस डिवाइस पर आपका ऐप्लिकेशन चल रहा है उस पर हार्डवेयर की सुविधाएं उपलब्ध हैं या नहीं. रनटाइम के दौरान खास सुविधाओं की जांच करने के लिए, hasSystemFeature(String)
तरीके का इस्तेमाल करें. यह तरीका एक स्ट्रिंग आर्ग्युमेंट लेता है, जो उस सुविधा के बारे में बताता है जिसकी आपको जांच करनी है.
यहां दिए गए कोड के उदाहरण में, रनटाइम के दौरान हार्डवेयर की सुविधाओं की उपलब्धता का पता लगाने का तरीका बताया गया है:
Kotlin
// Check whether the telephony hardware feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { Log.d("HardwareFeatureTest", "Device can make phone calls") } // Check whether android.hardware.touchscreen feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) { Log.d("HardwareFeatureTest", "Device has a touchscreen.") }
Java
// Check whether the telephony hardware feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { Log.d("HardwareFeatureTest", "Device can make phone calls"); } // Check whether android.hardware.touchscreen feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) { Log.d("HardwareFeatureTest", "Device has a touchscreen."); }
टचस्क्रीन
ज़्यादातर टीवी डिवाइसों में टचस्क्रीन या पॉइंटर इनपुट की सुविधाएं नहीं होती हैं. वे नेविगेशन के लिए, पूरी तरह से डायरेक्शनल पैड (डी-पैड) वाले रिमोट कंट्रोल पर निर्भर होते हैं. यह ज़रूरी है कि टीवी ऐप्लिकेशन, डी-पैड रिमोट कंट्रोल के साथ हमेशा काम करें.
टीवी के हिसाब से बनाए गए कंट्रोल का इस्तेमाल करके, नेविगेशन को सही तरीके से इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, टीवी नेविगेशन देखें.
टच सपोर्ट का एलान करना
कुछ टीवी डिवाइसों में पॉइंटर रिमोट और टचस्क्रीन डिसप्ले की सुविधा होती है. आपका ऐप्लिकेशन, क्लिक, कर्सर घुमाने, और स्क्रोल करने जैसी इंटरैक्शन की सुविधाओं के साथ काम कर सकता है. जैसे, मोबाइल डिवाइस पर. इससे, उन डिवाइसों पर बेहतर अनुभव मिलता है जिन पर ये सुविधाएं काम करती हैं.
अगर आपका ऐप्लिकेशन टच मोड की अनुमति देता है, तो पूरे ऐप्लिकेशन या अलग-अलग गतिविधियों के लिए टच सपोर्ट का एलान किया जा सकता है. इसके लिए, अपने AndroidManifest.xml में <application> या <activity> एलिमेंट के अंदर, true पर सेट किया गया android.software.leanback.supports_touch
<property> एलिमेंट जोड़ें:
<application ...> <property android:name="android.software.leanback.supports_touch" android:value="true|false" /> ... </application>
ध्यान दें: पॉइंटिंग रिमोट (जैसे, एयर माउस या ट्रैकपैड) के साथ काम करने वाले डिवाइसों पर, इस सेटिंग को चालू करने से कर्सर और टच मोड चालू हो जाता है. इसके लिए, प्लैटफ़ॉर्म के साथ काम करने वाले एम्युलेशन पर निर्भर रहने की ज़रूरत नहीं पड़ती. गतिविधि-लेवल का एलान, उस गतिविधि के लिए ऐप्लिकेशन-लेवल के एलान को बदल देता है. इस प्रॉपर्टी को शामिल न करने पर, डिफ़ॉल्ट रूप से false को चुना जाता है.
कैमरा
आम तौर पर, टीवी में कैमरा नहीं होता. इसके बावजूद, टीवी पर फ़ोटोग्राफ़ी से जुड़ा ऐप्लिकेशन उपलब्ध कराया जा सकता है. उदाहरण के लिए, अगर आपके पास कोई ऐसा ऐप्लिकेशन है जो फ़ोटो लेता है, दिखाता है, और उनमें बदलाव करता है, तो टीवी के लिए फ़ोटो लेने की सुविधा को बंद किया जा सकता है. इसके बाद भी, उपयोगकर्ता फ़ोटो देख सकते हैं और उनमें बदलाव कर सकते हैं. अगर आपको कैमरे से जुड़े अपने ऐप्लिकेशन को टीवी पर काम करने की सुविधा चालू करनी है, तो अपने ऐप्लिकेशन मेनिफ़ेस्ट में इस सुविधा के बारे में जानकारी जोड़ें:
<uses-feature android:name="android.hardware.camera" android:required="false" />
अगर आपने अपने ऐप्लिकेशन को कैमरे के बिना काम करने की अनुमति दी है, तो अपने ऐप्लिकेशन में ऐसा कोड जोड़ें जो यह पता लगा सके कि कैमरे की सुविधा उपलब्ध है या नहीं. साथ ही, आपके ऐप्लिकेशन के काम करने के तरीके में बदलाव कर सके. कोड के इस उदाहरण से पता चलता है कि कैमरे की मौजूदगी का पता कैसे लगाया जाता है:
Kotlin
// Check whether the camera hardware feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Log.d("Camera test", "Camera available!") } else { Log.d("Camera test", "No camera available. View and edit features only.") }
Java
// Check whether the camera hardware feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Log.d("Camera test", "Camera available!"); } else { Log.d("Camera test", "No camera available. View and edit features only."); }
जीपीएस
टीवी एक जगह पर रखे जाने वाले और घर के अंदर इस्तेमाल किए जाने वाले डिवाइस होते हैं. इनमें ग्लोबल पोज़िशनिंग सिस्टम (जीपीएस) रिसीवर पहले से मौजूद नहीं होते. अगर आपका ऐप्लिकेशन जगह की जानकारी का इस्तेमाल करता है, तो उपयोगकर्ताओं को अब भी जगह की जानकारी खोजने की अनुमति दी जा सकती है. इसके अलावा, जगह की जानकारी देने वाली किसी स्टैटिक सेवा का इस्तेमाल किया जा सकता है. जैसे, टीवी डिवाइस के सेटअप के दौरान कॉन्फ़िगर किया गया पिन कोड.
Kotlin
// Request a static location from the location manager. val locationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager val location = locationManager.getLastKnownLocation("static") if (location == null) { Log.e(TAG, "Location is null") return } // Attempt to get postal code from the static location object. val geocoder = Geocoder(this) val address: Address? = try { geocoder.getFromLocation(location.latitude, location.longitude, 1)?.firstOrNull() ?.apply { Log.d(TAG, postalCode) } } catch (e: IOException) { Log.e(TAG, "Geocoder error", e) null }
Java
// Request a static location from the location manager. LocationManager locationManager = (LocationManager) this.getSystemService( Context.LOCATION_SERVICE); Location location = locationManager.getLastKnownLocation("static"); // Attempt to get postal code from the static location object. Geocoder geocoder = new Geocoder(this); Address address = null; try { address = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1).get(0); Log.d("Postal code", address.getPostalCode()); } catch (IOException e) { Log.e(TAG, "Geocoder error", e); }
बैटरी बचाने वाले मोड के दौरान वीडियो चलाना रोकना
कुछ टीवी डिवाइसों में बैटरी बचाने वाला मोड होता है. यह मोड तब चालू होता है, जब उपयोगकर्ता डिवाइस को बंद करता है. डिवाइस को बंद करने के बजाय, यह मोड डिसप्ले को बंद कर देता है और Android TV को बैकग्राउंड में चालू रखता है. इस मोड में ऑडियो आउटपुट अब भी चालू रहता है. इसलिए, जब डिवाइस बैटरी बचाने वाले मोड में हो, तो चल रहे किसी भी कॉन्टेंट को बंद कर दें.
बैटरी बचाने वाले मोड के दौरान वीडियो चलने से रोकने के लिए,
onStop
को बदलें और फ़िलहाल चल रहे किसी भी वीडियो को रोकें:
Kotlin
override fun onStop() { // App-specific method to stop playback. stopPlayback() super.onStop() }
Java
@Override public void onStop() { // App-specific method to stop playback. stopPlayback(); super.onStop(); }
जब उपयोगकर्ता पावर को फिर से चालू करता है, तो onStart को कॉल किया जाता है. ऐसा तब होता है, जब आपका ऐप्लिकेशन फ़ोरग्राउंड में चालू हो. किसी गतिविधि को शुरू और बंद करने के बारे में ज़्यादा जानने के लिए,
गतिविधि पूरी होने की प्रोसेस देखें.