درباره تصویر در تصویر (PiP)

تصویر در تصویر (PiP) نوع خاصی از حالت چند پنجره ای است که بیشتر برای پخش ویدئو استفاده می شود. این امکان را به کاربر می دهد که در یک پنجره کوچک که به گوشه ای از صفحه سنجاق شده است، در حین پیمایش بین برنامه ها یا مرور محتوا در صفحه اصلی، ویدیویی را تماشا کند.

PiP از APIهای چندپنجره‌ای که در Android 7.0 در دسترس هستند برای ارائه پنجره همپوشانی ویدئویی پین شده استفاده می‌کند. برای افزودن PiP به برنامه خود، باید فعالیت خود را ثبت کنید، فعالیت خود را در صورت نیاز به حالت PiP تغییر دهید و مطمئن شوید که عناصر رابط کاربری پنهان هستند و پخش ویدیو زمانی که فعالیت در حالت PiP است ادامه می یابد.

رابط کاربری خود را در حالت PiP مدیریت کنید

وقتی وارد حالت PiP می‌شوید، کل رابط کاربری برنامه شما وارد پنجره PiP می‌شود، مگر اینکه مشخص کنید رابط کاربری شما چگونه باید در حالت 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، عناصر UI را تغییر دهید:

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()
}