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

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

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

使用 Jetpack 实现 PiP

使用 Jetpack 画中画库来实现画中画体验,因为它可以简化集成并减少常见的应用内问题。如需查看其使用示例,请参阅我们的平台示例应用。不过,如果您希望使用平台 API 实现 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 نمایش داده شوند، استفاده کنید:

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

،

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

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

使用 Jetpack 实现 PiP

使用 Jetpack 画中画库来实现画中画体验,因为它可以简化集成并减少常见的应用内问题。如需查看其使用示例,请参阅我们的平台示例应用。不过,如果您希望使用平台 API 实现 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 نمایش داده شوند، استفاده کنید:

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