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

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

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

پیاده‌سازی PiP با Jetpack

از کتابخانه Jetpack Picture-in-Picture برای پیاده‌سازی تجربه تصویر در تصویر استفاده کنید، زیرا ادغام را ساده کرده و مشکلات رایج درون برنامه‌ای را کاهش می‌دهد. برای مشاهده نمونه‌ای از کاربرد آن، به برنامه نمونه پلتفرم ما مراجعه کنید. با این حال، اگر ترجیح می‌دهید PiP را با استفاده از APIهای پلتفرم پیاده‌سازی کنید، به مستندات زیر مراجعه کنید.

،

پیاده‌سازی PiP با Jetpack

از کتابخانه Jetpack Picture-in-Picture برای پیاده‌سازی تجربه تصویر در تصویر استفاده کنید، زیرا ادغام را ساده کرده و مشکلات رایج درون برنامه‌ای را کاهش می‌دهد. برای مشاهده نمونه‌ای از کاربرد آن، به برنامه نمونه پلتفرم ما مراجعه کنید. با این حال، اگر ترجیح می‌دهید PiP را با استفاده از APIهای پلتفرم پیاده‌سازی کنید، به مستندات زیر مراجعه کنید.

مدیریت واسط کاربر در حالت 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() برای جابه‌جایی بین عناصر میانای کاربر استفاده کنید تا مشخص کنید وقتی برنامه وارد حالت «تصویردرتصویر» می‌شود کدام عناصر نشان داده شوند:

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