टीवी पर मल्टीटास्किंग

Android 14 (एपीआई लेवल 34) की सुविधा में कुछ सुधार किए गए हैं पिक्चर में पिक्चर (पीआईपी) एपीआई का इस्तेमाल करके, एक साथ कई काम करने की सुविधा दी जा सकती है. पीआईपी (पिक्चर में पिक्चर) के दौरान का इस्तेमाल Android 8.0 (एपीआई लेवल 26) में किया गया था. हालांकि, इसे ज़्यादा लोगों के लिए उपलब्ध नहीं कराया गया था यह सुविधा Android TV पर काम नहीं करती, लेकिन Android से पहले के वर्शन वाले Google TV पर बिलकुल भी उपलब्ध नहीं है 13. टीवी के लिए मल्टीटास्किंग (एक साथ कई काम करने की सुविधा) पीआईपी मोड का इस्तेमाल करके, दो स्क्रीन पर एक साथ मौजूद रहने के लिए अलग-अलग ऐप्लिकेशन: एक ऐप्लिकेशन, जो फ़ुल मोड में चल रहा है वहीं, दूसरी स्क्रीन पीआईपी मोड में दिखेगी. यहां हैं में से किसी एक मोड में चल रहे ऐप्लिकेशन के लिए अलग-अलग ज़रूरी शर्तें पूरी की जा रही हैं.

डिफ़ॉल्ट रूप से, पीआईपी ऐप्लिकेशन फ़ुल-स्क्रीन ऐप्लिकेशन को ओवरले करता है. यह है Android पिक्चर में पिक्चर सुविधा की तरह ही काम करता है.

ध्यान दें कि मल्टीटास्किंग (एक साथ कई काम करना) की सुविधा को इंटिग्रेट करते समय, आपके ऐप्लिकेशन को इस्तेमाल के टाइप में टीवी ऐप्लिकेशन की क्वालिटी से जुड़े दिशा-निर्देशों के मुताबिक होना चाहिए.

अपने ऐप्लिकेशन को पीआईपी मोड में चलाएं

Android 14 (एपीआई लेवल 34) या इसके बाद के वर्शन वाले टीवी डिवाइसों के लिए, पीआईपी में ऐप्लिकेशन चलाएं enterPictureInPictureMode() पर कॉल करके मोड का इस्तेमाल करें. पहले से चल रहे टीवी डिवाइस Android के किसी भी वर्शन में पीआईपी मोड काम नहीं करता.

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

Kotlin

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    pictureInPictureButton.visibility =
        if (requireActivity().packageManager.hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) {
            pictureInPictureButton.setOnClickListener {
                val aspectRatio = Rational(view.width, view.height)
                val params = PictureInPictureParams.Builder()
                    .setAspectRatio(aspectRatio)
                    .build()
                val result = requireActivity().enterPictureInPictureMode(params)
            }
            View.VISIBLE
        } else {
            View.GONE
        }
}

Java

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    if (requireActivity().getPackageManager().hasSystemFeature(FEATURE_PICTURE_IN_PICTURE)) {
        pictureInPictureButton.setVisibility(View.VISIBLE);
        pictureInPictureButton.setOnClickListener(v -> {
            Rational aspectRatio = new Rational(view.getWidth(), view.getHeight());
            PictureInPictureParams params = new PictureInPictureParams.Builder()
                    .setAspectRatio(aspectRatio)
                    .setTitle("My Streaming App")
                    .setSubtitle("My On-Demand Content")
                    .build();
            Boolean result = requireActivity().enterPictureInPictureMode(params);
        });
    } else {
        pictureInPictureButton.setVisibility(View.GONE);
    }
}

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

उपयोगकर्ता को जानकारी देने के लिए, टाइटल और सबटाइटल जोड़ना न भूलें जानें कि आम तौर पर इस पीआईपी का इस्तेमाल किस काम के लिए किया जाता है.

पीआईपी मोड में चल रहे ऐप्लिकेशन के साथ काम करता है

जब आपका ऐप्लिकेशन फ़ुलस्क्रीन ऐप्लिकेशन के रूप में चल रहा होता है, तो उसे दूसरे ऐप्लिकेशन के साथ काम करने की ज़रूरत पड़ सकती है पीआईपी मोड में चल रहे ऐप्लिकेशन पर.

Keep-clear एपीआई

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

साफ़ रखें

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

<TextView
    android:id="@+id/important_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:preferKeepClear="true"
    android:text="@string/app_name"/>

setPreferKeepClear() का इस्तेमाल करके, प्रोग्राम के हिसाब से भी ऐसा किया जा सकता है:

Kotlin

private lateinit var binding: MyLayoutBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    binding = MyLayoutBinding.inflate(layoutInflater)
    setContentView(binding.root)
    binding.importantText.isPreferKeepClear = true
}

Java

private MyLayoutBinding binding;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    binding = MyLayoutBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
    binding.importantText.setPreferKeepClear(true);
}

ऐसा भी हो सकता है कि आपको पूरे View को हटाने की ज़रूरत न पड़े, लेकिन उसका सिर्फ़ एक हिस्सा. setPreferKeepClearRects() का इस्तेमाल इन कामों के लिए किया जा सकता है View के ऐसे क्षेत्र बताएं जिन्हें अलग से नहीं लगाया जाना चाहिए. ऐसे यूज़र इंटरफ़ेस (यूआई) जिनका इस्तेमाल नहीं किया जाता नेटिव रूप से View, जैसे कि Flutter, Jetpack Compose, और वेबव्यू में ये चीज़ें हो सकती हैं ऐसे सब-सेक्शन जहां क्षेत्रों को साफ़ तौर पर रखना ज़रूरी होता है. ऐसे मामलों में, इस एपीआई का इस्तेमाल किया जा सकता है.

इस्तेमाल के टाइप

आपके ऐप्लिकेशन को कुल कीमत के मेटाडेटा वैल्यू एट्रिब्यूट का एलान करना होगा com.google.android.tv.pip.category जो प्राइमरी टाइप से संबंधित है या 'पिक्चर में पिक्चर' मोड का इस्तेमाल किस तरह का है. सेट किया गया कोई भी <activity> android:supportsPictureInPicture="true" को इस एट्रिब्यूट के बारे में बताने के लिए, प्रासंगिक मान नीचे दी गई है.

ऐसे इस्तेमाल जो इनमें से किसी भी कैटगरी में नहीं आते हैं. खास तौर पर, टीवी पर 'पिक्चर में पिक्चर' मोड में, मीडिया कॉन्टेंट चलाने की अनुमति नहीं है.

वैल्यू ब्यौरा
"communication" कम्यूनिकेशन के इस्तेमाल के उदाहरण, जैसे कि वीडियो या वॉइस कॉल.
"smartHome" स्मार्ट होम इंटिग्रेशन, जैसे कि कनेक्ट की गई दरवाज़े की घंटियां या बेबी मॉनिटर.
"health" स्वास्थ्य से जुड़े इस्तेमाल के उदाहरण, जैसे कि फ़िटनेस ट्रैकिंग या सेहत की निगरानी करने वाले ऐप्लिकेशन.
"ticker" टिकर के इस्तेमाल के उदाहरण, जैसे कि लाइव खेल के स्कोर या खबरें और स्टॉक टिकर.

एक से ज़्यादा वैल्यू को वर्टिकल बार (|) से अलग किया जाता है. जैसे:

<meta-data android:name="com.google.android.tv.pip.category" android:value="smartHome|health" />