আপনার 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">
আপনার Compose কোডে, নিম্নলিখিত কাজগুলি করুন:
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") }
প্রি-Android 12 ভার্সনে লিভ অ্যাপে PiP যোগ করা
Android 12-এর আগের ভার্সনের জন্য PiP যোগ করতে, addOnUserLeaveHintProvider ব্যবহার করুন। Android 12-এর আগের ভার্সনে PiP যোগ করতে
এইসব ধাপ অনুসরণ করুন:
- একটি ভার্সন গেট যোগ করুন যাতে এই কোডটি শুধুমাত্র O থেকে R পর্যন্ত ভার্সনে অ্যাক্সেস করা যায়।
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") }
Android 12-এর পরের যেকোনও ভার্সনে লিভ অ্যাপে PiP যোগ করা
Android 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 উইন্ডোর অ্যাস্পেক্ট রেশিও সেট করতে, আপনি হয় নির্দিষ্ট
অ্যাস্পেক্ট রেশিও বেছে নিতে পারেন অথবা প্লেয়ারের ভিডিও সাইজের প্রস্থ ও উচ্চতা ব্যবহার করতে পারেন। আপনি 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)
আপনি কাস্টম প্লেয়ার ব্যবহার করলে, আপনার প্লেয়ারের জন্য নির্দিষ্ট সিনট্যাক্স ব্যবহার করে প্লেয়ারের উচ্চতা ও প্রস্থের আকৃতির অনুপাত সেট করুন। মনে রাখবেন, আপনার প্লেয়ার ইনিশিয়ালাইজ করার সময় সাইজ পরিবর্তন করলে, যদি এটি অ্যাস্পেক্ট রেশিওর বৈধ সীমার বাইরে চলে যায়, তাহলে আপনার অ্যাপ ক্র্যাশ করবে। aspect ratio কখন গণনা করা যাবে তা চেক করার জন্য আপনাকে হয়ত কিছু কোড যোগ করতে হবে, ঠিক যেভাবে media3 প্লেয়ারের ক্ষেত্রে করা হয়।