নিম্নলিখিত পরিস্থিতিতে আপনার অ্যাপের PiP মোডে প্রবেশ করা উচিত নয়:
- ভিডিও বন্ধ বা পজ করা হলে।
- আপনি যদি ভিডিও প্লেয়ারের চেয়ে অ্যাপের অন্য পৃষ্ঠায় থাকেন।
আপনার অ্যাপ কখন PiP মোডে প্রবেশ করে তা নিয়ন্ত্রণ করতে, একটি পরিবর্তনশীল যোগ করুন যা একটি mutableStateOf ব্যবহার করে ভিডিও প্লেয়ারের অবস্থা ট্র্যাক করে।
ভিডিও চলছে কিনা তার উপর ভিত্তি করে স্থিতি টগল করুন
ভিডিও প্লেয়ার বাজছে কিনা তার উপর ভিত্তি করে স্থিতি টগল করতে, ভিডিও প্লেয়ারে একজন শ্রোতা যোগ করুন। প্লেয়ার খেলছে কি না তার উপর ভিত্তি করে আপনার স্টেট ভেরিয়েবলের অবস্থা টগল করুন:
player.addListener(object : Player.Listener { override fun onIsPlayingChanged(isPlaying: Boolean) { shouldEnterPipMode = isPlaying } })
প্লেয়ার রিলিজ হয়েছে কিনা তার উপর ভিত্তি করে টগল স্টেট
প্লেয়ার রিলিজ হলে, আপনার স্টেট ভেরিয়েবলকে false সেট করুন:
fun releasePlayer() { shouldEnterPipMode = false }
PiP মোড প্রবেশ করা হয়েছে কিনা তা নির্ধারণ করতে রাজ্য ব্যবহার করুন (প্রি-অ্যান্ড্রয়েড 12)
- যেহেতু PiP প্রি-12 যোগ করার জন্য একটি
DisposableEffectব্যবহার করা হয়, তাই আপনাকে আপনার স্টেট ভেরিয়েবল হিসাবেnewValueসেট করেrememberUpdatedStateদ্বারা একটি নতুন ভেরিয়েবল তৈরি করতে হবে। এটি নিশ্চিত করবে যে আপডেট করা সংস্করণটিDisposableEffectমধ্যে ব্যবহার করা হয়েছে। যখন
OnUserLeaveHintListenerট্রিগার করা হয় তখন ল্যাম্বডা-তে আচরণ সংজ্ঞায়িত করে,enterPictureInPictureMode()এ কলের চারপাশে স্টেট ভেরিয়েবল সহ একটিifস্টেটমেন্ট যোগ করুন :val currentShouldEnterPipMode by rememberUpdatedState(newValue = shouldEnterPipMode) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && Build.VERSION.SDK_INT < Build.VERSION_CODES.S ) { val context = LocalContext.current DisposableEffect(context) { val onUserLeaveBehavior = Runnable { if (currentShouldEnterPipMode) { context.findActivity() .enterPictureInPictureMode(PictureInPictureParams.Builder().build()) } } context.findActivity().addOnUserLeaveHintListener( onUserLeaveBehavior ) onDispose { context.findActivity().removeOnUserLeaveHintListener( onUserLeaveBehavior ) } } } else { Log.i("PiP info", "API does not support PiP") }
PiP মোড প্রবেশ করা হয়েছে কিনা তা নির্ধারণ করতে রাষ্ট্র ব্যবহার করুন (অ্যান্ড্রয়েড 12-পরবর্তী)
আপনার স্টেট ভেরিয়েবলকে setAutoEnterEnabled এ পাস করুন যাতে আপনার অ্যাপ সঠিক সময়ে শুধুমাত্র PiP মোডে প্রবেশ করে:
val pipModifier = modifier.onGloballyPositioned { layoutCoordinates -> val builder = PictureInPictureParams.Builder() // Add autoEnterEnabled for versions S and up if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { builder.setAutoEnterEnabled(shouldEnterPipMode) } context.findActivity().setPictureInPictureParams(builder.build()) } VideoPlayer(pipModifier)
একটি মসৃণ অ্যানিমেশন বাস্তবায়ন করতে setSourceRectHint ব্যবহার করুন
setSourceRectHint API PiP মোডে প্রবেশ করার জন্য একটি মসৃণ অ্যানিমেশন তৈরি করে। Android 12+ এ, এটি PiP মোড থেকে বেরিয়ে আসার জন্য একটি মসৃণ অ্যানিমেশন তৈরি করে। PiP-এ রূপান্তরের পরে দৃশ্যমান কার্যকলাপের ক্ষেত্রটি নির্দেশ করতে PiP বিল্ডারে এই API যোগ করুন।
- শুধুমাত্র
buildersetSourceRectHint()যোগ করুন যদি রাজ্য সংজ্ঞায়িত করে যে অ্যাপটি PiP মোডে প্রবেশ করবে। যখন অ্যাপটিকে PiP-এ প্রবেশ করার প্রয়োজন হয় না তখন এটিsourceRectগণনা করা এড়িয়ে যায়। -
sourceRectমান সেট করতে, মডিফায়ারেonGloballyPositionedফাংশন থেকে দেওয়াlayoutCoordinatesব্যবহার করুন। -
buildersetSourceRectHint()কল করুন এবংsourceRectভেরিয়েবলে পাস করুন।
val context = LocalContext.current val pipModifier = modifier.onGloballyPositioned { layoutCoordinates -> val builder = PictureInPictureParams.Builder() if (shouldEnterPipMode) { val sourceRect = layoutCoordinates.boundsInWindow().toAndroidRectF().toRect() builder.setSourceRectHint(sourceRect) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { builder.setAutoEnterEnabled(shouldEnterPipMode) } context.findActivity().setPictureInPictureParams(builder.build()) } VideoPlayer(pipModifier)