আপনার AndroidManifest.xml ফাইলের অ্যাক্টিভিটি ট্যাগে, নিম্নলিখিতগুলি করুন:
-
supportsPictureInPictureযোগ করুন এবং এটিকেtrueতে সেট করুন যাতে আপনি আপনার অ্যাপে picture-in-picture (PiP) ব্যবহার করবেন। - আপনার অ্যাক্টিভিটি লেআউট কনফিগারেশন পরিবর্তনগুলি পরিচালনা করে কিনা তা নির্দিষ্ট করার জন্য
configChangesযোগ করুন এবং এটিকেorientation|screenLayout|screenSize|smallestScreenSizeএ সেট করুন। এইভাবে, PiP মোড ট্রানজিশনের সময় লেআউট পরিবর্তনগুলি ঘটলে আপনার অ্যাক্টিভিটি পুনরায় চালু হয় না।
<activity
android:name=".SnippetsActivity"
android:exported="true"
android:supportsPictureInPicture="true"
android:configChanges="orientation|screenLayout|screenSize|smallestScreenSize"
android:theme="@style/Theme.Snippets">
আপনার কম্পোজ কোডে, নিম্নলিখিতগুলি করুন:
-
Contextএ এই এক্সটেনশনটি যোগ করুন। কার্যকলাপটি অ্যাক্সেস করার জন্য আপনাকে গাইড জুড়ে একাধিকবার এই এক্সটেনশনটি ব্যবহার করতে হবে।internal fun Context.findActivity(): ComponentActivity { var context = this while (context is ContextWrapper) { if (context is ComponentActivity) return context context = context.baseContext } throw IllegalStateException("Picture in picture should be called in the context of an Activity") }
প্রি-অ্যান্ড্রয়েড ১২-এর জন্য PiP অন লিভ অ্যাপ যোগ করুন
প্রি-অ্যান্ড্রয়েড ১২-এর জন্য PiP যোগ করতে, addOnUserLeaveHintProvider ব্যবহার করুন। প্রি-অ্যান্ড্রয়েড ১২-এর জন্য PiP যোগ করতে এই ধাপগুলি অনুসরণ করুন:
- একটি ভার্সন গেট যোগ করুন যাতে এই কোডটি শুধুমাত্র ভার্সন O থেকে R পর্যন্ত অ্যাক্সেস করা যায়।
- কী হিসেবে
Contextসহ একটিDisposableEffectব্যবহার করুন। -
DisposableEffectভেতরে, ল্যাম্বডা ব্যবহার করেonUserLeaveHintProviderকখন ট্রিগার করা হয় তার আচরণ নির্ধারণ করুন। ল্যাম্বডাতে,findActivity()এenterPictureInPictureMode()কল করুন এবংPictureInPictureParams.Builder().build()এ পাস করুন। -
findActivity()ব্যবহার করেaddOnUserLeaveHintListenerযোগ করুন এবং lambda তে পাস করুন। -
onDisposeএ,findActivity()ব্যবহার করেremoveOnUserLeaveHintListenerযোগ করুন এবং lambda তে পাস করুন।
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 { 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 অ্যাপ যোগ করুন
অ্যান্ড্রয়েড ১২-এর পরে, PictureInPictureParams.Builder একটি মডিফায়ারের মাধ্যমে যোগ করা হয় যা অ্যাপের ভিডিও প্লেয়ারে পাঠানো হয়।
- একটি
modifierতৈরি করুন এবং এতেonGloballyPositionedকল করুন। লেআউট স্থানাঙ্কগুলি পরবর্তী ধাপে ব্যবহার করা হবে। -
PictureInPictureParams.Builder()এর জন্য একটি ভেরিয়েবল তৈরি করুন। - SDK S নাকি পরবর্তী তা পরীক্ষা করার জন্য একটি
ifস্টেটমেন্ট যোগ করুন। যদি তাই হয়, তাহলে বিল্ডারেsetAutoEnterEnabledযোগ করুন এবং সোয়াইপ করার সময় PiP মোডে প্রবেশ করার জন্য এটিtrueতে সেট করুন। এটিenterPictureInPictureModeএর চেয়ে মসৃণ অ্যানিমেশন প্রদান করে। -
setPictureInPictureParams()কল করতেfindActivity()ব্যবহার করুন।builderbuild()কল করুন এবং এটি পাস করুন।
val pipModifier = modifier.onGloballyPositioned { layoutCoordinates -> val builder = PictureInPictureParams.Builder() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { builder.setAutoEnterEnabled(true) } context.findActivity().setPictureInPictureParams(builder.build()) } VideoPlayer(pipModifier)
PiP উইন্ডোর আকৃতির অনুপাত সেট করতে setAspectRatio ব্যবহার করুন।
PiP উইন্ডোর আকৃতির অনুপাত সেট করতে, আপনি হয় একটি নির্দিষ্ট আকৃতির অনুপাত বেছে নিতে পারেন অথবা প্লেয়ারের ভিডিও আকারের প্রস্থ এবং উচ্চতা ব্যবহার করতে পারেন। যদি আপনি একটি media3 প্লেয়ার ব্যবহার করেন, তাহলে আকৃতির অনুপাত সেট করার আগে পরীক্ষা করে নিন যে প্লেয়ারটি নাল নয় এবং প্লেয়ারের ভিডিও আকার VideoSize.UNKNOWN এর সমান নয়।
val context = LocalContext.current val pipModifier = modifier.onGloballyPositioned { layoutCoordinates -> val builder = PictureInPictureParams.Builder() if (shouldEnterPipMode && player != null && player.videoSize != VideoSize.UNKNOWN) { val sourceRect = layoutCoordinates.boundsInWindow().toAndroidRectF().toRect() builder.setSourceRectHint(sourceRect) builder.setAspectRatio( Rational(player.videoSize.width, player.videoSize.height) ) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { builder.setAutoEnterEnabled(shouldEnterPipMode) } context.findActivity().setPictureInPictureParams(builder.build()) } VideoPlayer(pipModifier)
যদি আপনি একটি কাস্টম প্লেয়ার ব্যবহার করেন, তাহলে আপনার প্লেয়ারের জন্য নির্দিষ্ট সিনট্যাক্স ব্যবহার করে প্লেয়ারের উচ্চতা এবং প্রস্থের উপর আকৃতির অনুপাত সেট করুন। মনে রাখবেন যে যদি আপনার প্লেয়ারটি ইনিশিয়ালাইজেশনের সময় আকার পরিবর্তন করে, যদি এটি আকৃতির অনুপাতের বৈধ সীমার বাইরে চলে যায়, তাহলে আপনার অ্যাপটি ক্র্যাশ হয়ে যাবে। মিডিয়া3 প্লেয়ারের মতো আকৃতির অনুপাত কখন গণনা করা যেতে পারে তা পরীক্ষা করার প্রয়োজন হতে পারে।