पिक्चर में पिक्चर (पीआईपी) मोड के बारे में जानकारी

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

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

Jetpack की मदद से पीआईपी सुविधा लागू करना

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

PiP मोड में यूज़र इंटरफ़ेस (यूआई) को मैनेज करना

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

सबसे पहले, आपको यह जानना होगा कि आपका ऐप्लिकेशन PiP मोड में है या नहीं. इसके लिए, OnPictureInPictureModeChangedProvider का इस्तेमाल किया जा सकता है. यहां दिया गया कोड यह जांच करता है कि आपका ऐप्लिकेशन, PiP मोड में है या नहीं.

@Composable
fun rememberIsInPipMode(): Boolean {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val activity = LocalContext.current.findActivity()
        var pipMode by remember { mutableStateOf(activity.isInPictureInPictureMode) }
        DisposableEffect(activity) {
            val observer = Consumer<PictureInPictureModeChangedInfo> { info ->
                pipMode = info.isInPictureInPictureMode
            }
            activity.addOnPictureInPictureModeChangedListener(
                observer
            )
            onDispose { activity.removeOnPictureInPictureModeChangedListener(observer) }
        }
        return pipMode
    } else {
        return false
    }
}

अब rememberIsInPipMode() का इस्तेमाल करके, यह टॉगल किया जा सकता है कि ऐप्लिकेशन के PiP मोड में आने पर, कौनसे यूज़र इंटरफ़ेस (यूआई) एलिमेंट दिखाए जाएं:

val inPipMode = rememberIsInPipMode()

Column(modifier = modifier) {
    // This text will only show up when the app is not in PiP mode
    if (!inPipMode) {
        Text(
            text = "Picture in Picture",
        )
    }
    VideoPlayer()
}