टीवी हार्डवेयर हैंडल करना

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

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

टीवी डिवाइस ढूंढें

अगर कोई ऐसा ऐप्लिकेशन बनाया जा रहा है जो टीवी डिवाइसों और अन्य डिवाइसों, दोनों पर काम करता है, तो आपको देखें कि आपका ऐप्लिकेशन किस तरह के डिवाइस पर चल रहा है. साथ ही, अपने ऐप्लिकेशन के काम करने के तरीके में बदलाव करें. इसके लिए उदाहरण के लिए, अगर आपके पास कोई ऐसा ऐप्लिकेशन है जिसे 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" के तौर पर मार्क करें.

टीवी डिवाइसों पर इस्तेमाल के लिए बनाए गए सभी ऐप्लिकेशन को यह बताना होगा कि टचस्क्रीन की सुविधा देना ज़रूरी नहीं है, जैसा कि Google Ads के साथ शुरू करना टीवी ऐप्लिकेशन. अगर आपका ऐप्लिकेशन आम तौर पर, ऐसी एक या उससे ज़्यादा सुविधाओं का इस्तेमाल करता है जिन्हें टीवी डिवाइसों पर इस्तेमाल नहीं किया जा सकता, तो मेनिफ़ेस्ट में उन सुविधाओं के लिए, android:required एट्रिब्यूट सेटिंग को false पर सेट करें.

चेतावनी: हार्डवेयर सुविधा को true में सेट करने का मान, आपके ऐप्लिकेशन को टीवी पर इंस्टॉल होने से रोकता है डिवाइस या Android TV के होम स्क्रीन लॉन्चर में दिख रहे हों.

हार्डवेयर सुविधाओं का इस्तेमाल करने वाली अनुमतियों का ध्यान रखें

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

अनुमति शामिल हार्डवेयर सुविधा
RECORD_AUDIO android.hardware.microphone
CAMERA android.hardware.camera और
android.hardware.camera.autofocus
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network (टारगेट एपीआई लेवल 20 या इससे पहले का लेवल सिर्फ़)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (टारगेट एपीआई लेवल 20 या इससे पहले का लेवल सिर्फ़)

ACCESS_WIFI_STATE
CHANGE_WIFI_STATE

android.hardware.wifi

कुछ टीवी डिवाइसों में सिर्फ़ ईथरनेट कनेक्शन होता है.

उन अनुमतियों के अनुरोधों की पूरी सूची देखें जो हार्डवेयर की सुविधा की ज़रूरत बताते हैं. इसके लिए, देखें uses-feature पढ़ें. अगर आपका ऐप्लिकेशन पहले से बताई गई किसी सुविधा का अनुरोध करता है, तो uses-feature आपके मेनिफ़ेस्ट में, इसमें शामिल हार्डवेयर सुविधा के बारे में एलान से पता चलता है कि यह काम नहीं करता है आवश्यक. android:required="false".

ध्यान दें: अगर आपका ऐप्लिकेशन Android 5.0 (एपीआई लेवल 21) को टारगेट करता है या और उच्च मान का उपयोग करता है और ACCESS_COARSE_LOCATION या ACCESS_FINE_LOCATION अनुमति, उपयोगकर्ता अब भी आपकी टीवी डिवाइस पर ऐप्लिकेशन, भले ही टीवी डिवाइस में नेटवर्क कार्ड या GPS न हो पाने वाले.

अपने ऐप्लिकेशन के लिए हार्डवेयर सुविधाओं को वैकल्पिक बनाने के बाद, आपको यह जांच करनी होगी कि और फिर अपने ऐप्लिकेशन के काम करने के तरीके में बदलाव करें. अगला सेक्शन हार्डवेयर सुविधाओं की जांच करने के तरीके के बारे में चर्चा की गई है और यह बताने के लिए कुछ तरीके बताए गए हैं कि आपके ऐप्लिकेशन का व्यवहार.

मेनिफ़ेस्ट में सुविधाओं को फ़िल्टर करने और उनके बारे में ज़्यादा जानकारी पाने के लिए, यह देखें 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.");
}

टचस्क्रीन

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

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

कैमरा

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

<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: Location = locationManager.getLastKnownLocation("static")

// 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)[0]
                    .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 को बनाए रखता है बैकग्राउंड में टीवी चल रहा है. इस मोड में ऑडियो आउटपुट अब भी चालू रहता है. इसलिए, अगर डिवाइस कम पावर वाले मोड में है, तो मौजूदा समय में चल रहे किसी भी कॉन्टेंट को बंद कर दिया जाएगा.

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