আপনার 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 = 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") }
পোস্ট-অ্যান্ড্রয়েড 12-এর জন্য ছুটিতে PiP যোগ করুন
অ্যান্ড্রয়েড 12-এর পরে, 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 উইন্ডোর আকৃতির অনুপাত সেট করতে, আপনি হয় একটি নির্দিষ্ট অনুপাত চয়ন করতে পারেন বা প্লেয়ারের ভিডিও আকারের প্রস্থ এবং উচ্চতা ব্যবহার করতে পারেন৷ আপনি যদি মিডিয়া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 প্লেয়ারের ক্ষেত্রে যেভাবে করা হয় তার অনুরূপ আকৃতির অনুপাত গণনা করার সময় আপনাকে চেক যোগ করতে হতে পারে।