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