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

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

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

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

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

،

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

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

مدیریت واسط کاربر در حالت «تصویردرتصویر»

وقتی وارد حالت «تصویردرتصویر» می‌شوید، کل «واسط کاربر» برنامه‌تان وارد پنجره «تصویردرتصویر» می‌شود، مگر اینکه مشخص کنید «واسط کاربر» شما در داخل و خارج از حالت «تصویردرتصویر» چگونه باید به‌نظر برسد.

ابتدا باید بدانید که برنامه شما در حالت 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()
}