আপনার AndroidManifest.xml
ফাইলের কার্যকলাপ ট্যাগে, নিম্নলিখিতগুলি করুন:
- আপনি আপনার অ্যাপে PiP ব্যবহার করবেন তা ঘোষণা করতে
supportsPictureInPicture
যোগ করুন এবং এটিকেtrue
সেট করুন। 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") }
প্রি-অ্যান্ড্রয়েড 12-এর জন্য ছুটিতে PiP যোগ করুন
প্রি-Android 12-এর জন্য PiP যোগ করতে, addOnUserLeaveHintProvider
ব্যবহার করুন। প্রি-অ্যান্ড্রয়েড 12-এর জন্য PiP যোগ করতে এই পদক্ষেপগুলি অনুসরণ করুন:
- একটি সংস্করণ গেট যোগ করুন যাতে এই কোডটি শুধুমাত্র R পর্যন্ত O সংস্করণে অ্যাক্সেস করা যায়।
- কী হিসাবে
Context
সহ একটিDisposableEffect
ব্যবহার করুন। -
DisposableEffect
ভিতরে, যখন একটি ল্যাম্বডা ব্যবহার করেonUserLeaveHintProvider
ট্রিগার হয় তখন আচরণটি সংজ্ঞায়িত করুন। ল্যাম্বডাতে,findActivity()
এenterPictureInPictureMode()
কল করুন এবংPictureInPictureParams.Builder().build()
এ পাস করুন। -
findActivity()
ব্যবহার করেaddOnUserLeaveHintListener
যোগ করুন এবং ল্যাম্বডায় পাস করুন। -
onDispose
এ,findActivity()
ব্যবহার করেremoveOnUserLeaveHintListener
যোগ করুন এবং ল্যাম্বডায় পাস করুন।
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: () -> Unit = { 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") }
পোস্ট-অ্যান্ড্রয়েড 12-এর জন্য ছুটিতে PiP যোগ করুন
অ্যান্ড্রয়েড 12-এর পরে, PictureInPictureParams.Builder
একটি মডিফায়ারের মাধ্যমে যোগ করা হয়েছে যা অ্যাপের ভিডিও প্লেয়ারে পাস করা হয়।
- একটি
modifier
তৈরি করুন এবং এটিতেonGloballyPositioned
কল করুন। লেআউট স্থানাঙ্কগুলি পরবর্তী ধাপে ব্যবহার করা হবে। -
PictureInPictureParams.Builder()
এর জন্য একটি ভেরিয়েবল তৈরি করুন। - SDK S বা তার উপরে কিনা তা পরীক্ষা করতে একটি
if
স্টেটমেন্ট যোগ করুন। যদি তাই হয়, বিল্ডারেsetAutoEnterEnabled
যোগ করুন এবং সোয়াইপ করার পরে PiP মোডে প্রবেশ করতে এটিকেtrue
সেট করুন। এটিenterPictureInPictureMode
মধ্য দিয়ে যাওয়ার চেয়ে একটি মসৃণ অ্যানিমেশন প্রদান করে। -
setPictureInPictureParams()
findActivity()
) ব্যবহার করুন।builder
build()
কল করুন এবং এটি পাস করুন।
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 উইন্ডোর আকৃতির অনুপাত সেট করতে, আপনি হয় একটি নির্দিষ্ট অনুপাত চয়ন করতে পারেন বা প্লেয়ারের ভিডিও আকারের প্রস্থ এবং উচ্চতা ব্যবহার করতে পারেন৷ আপনি যদি মিডিয়া3 প্লেয়ার ব্যবহার করেন, তাহলে অ্যাসপেক্ট রেশিও সেট করার আগে চেক করুন যে প্লেয়ারটি নাল নয় এবং প্লেয়ারের ভিডিও সাইজ [ VideoSize.UNKNOWN
][6] এর সমান নয়।
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 প্লেয়ারের ক্ষেত্রে যেভাবে করা হয় তার অনুরূপ আকৃতির অনুপাত গণনা করার সময় আপনাকে চেক যোগ করতে হতে পারে।