যে অ্যাপগুলি বর্তমানে স্বতন্ত্র com.google.android.exoplayer2
লাইব্রেরি এবং androidx.media
ব্যবহার করছে সেগুলিকে androidx.media3
এ স্থানান্তরিত করা উচিত৷ গ্রেডল বিল্ড ফাইল, জাভা এবং কোটলিন সোর্স ফাইল এবং ExoPlayer 2.19.1
থেকে AndroidX Media3 1.1.1
এ XML লেআউট ফাইল স্থানান্তর করতে মাইগ্রেশন স্ক্রিপ্ট ব্যবহার করুন।
ওভারভিউ
আপনি মাইগ্রেট করার আগে, নতুন API, মাইগ্রেট করার জন্য API, এবং আপনার অ্যাপের প্রজেক্টের যে পূর্বশর্তগুলি পূরণ করা উচিত সে সম্পর্কে আরও জানতে নিম্নলিখিত বিভাগগুলি পর্যালোচনা করুন৷
কেন Jetpack Media3 এ মাইগ্রেট করবেন
- এটি ExoPlayer-এর নতুন হোম , যেখানে
com.google.android.exoplayer2
বন্ধ রয়েছে। -
MediaBrowser
/MediaController
দিয়ে কম্পোনেন্ট/প্রসেস জুড়ে প্লেয়ার এপিআই অ্যাক্সেস করুন। -
MediaSession
এবংMediaController
API এর বর্ধিত ক্ষমতা ব্যবহার করুন। - সূক্ষ্ম-দানাযুক্ত অ্যাক্সেস নিয়ন্ত্রণ সহ প্লেব্যাক ক্ষমতার বিজ্ঞাপন দিন।
-
MediaSessionConnector
এবংPlayerNotificationManager
সরিয়ে আপনার অ্যাপকে সরল করুন । - মিডিয়া-কম্প্যাট ক্লায়েন্ট APIগুলির সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ (
MediaBrowserCompat
/MediaControllerCompat
/MediaMetadataCompat
)
AndroidX Media3 এ স্থানান্তরিত করার জন্য মিডিয়া API
- ExoPlayer এবং এর এক্সটেনশন
এর মধ্যে লিগ্যাসি ExoPlayer প্রকল্পের সমস্ত মডিউল অন্তর্ভুক্ত রয়েছে যা বন্ধ করা মিডিয়াসেসন মডিউল ছাড়া৷com.google.android.exoplayer2
এর প্যাকেজের উপর নির্ভর করে অ্যাপ বা মডিউলগুলি মাইগ্রেশন স্ক্রিপ্টের সাথে স্থানান্তরিত করা যেতে পারে। - MediaSessionConnector (
androidx.media.*
এরandroidx.media:media:1.4.3+
প্যাকেজের উপর নির্ভর করে)
MediaSessionConnector
সরান এবং পরিবর্তেandroidx.media3.session.MediaSession
ব্যবহার করুন। - MediaBrowserServiceCompat (
androidx.media.*
androidx.media:media:1.4.3+
এর প্যাকেজগুলি)
androidx.media.MediaBrowserServiceCompat
এর সাবক্লাসগুলিকেandroidx.media3.session.MediaLibraryService
এবংMediaBrowserCompat.MediaItem
ব্যবহার করেandroidx.media3.common.MediaItem
এ কোড স্থানান্তর করুন। - MediaBrowserCompat (
android.support.v4.media.*
androidx.media:media:1.4.3+
এর প্যাকেজগুলি)
androidx.media3.session.MediaBrowser
এর সাথেandroidx.media3.common.MediaItem
ব্যবহার করতেMediaBrowserCompat
বাMediaControllerCompat
ব্যবহার করে ক্লায়েন্ট কোড মাইগ্রেট করুন।
পূর্বশর্ত
নিশ্চিত করুন যে আপনার প্রকল্প উৎস নিয়ন্ত্রণের অধীনে আছে
নিশ্চিত করুন যে আপনি সহজেই স্ক্রিপ্টেড মাইগ্রেশন টুল দ্বারা প্রয়োগ করা পরিবর্তনগুলিকে প্রত্যাবর্তন করতে পারেন৷ আপনার যদি এখনও উত্স নিয়ন্ত্রণে আপনার প্রকল্প না থাকে তবে এটি শুরু করার জন্য এখনই একটি ভাল সময়। যদি কোনো কারণে আপনি এটি করতে না চান, মাইগ্রেশন শুরু করার আগে আপনার প্রকল্পের একটি ব্যাকআপ কপি তৈরি করুন।
আপনার অ্যাপ আপডেট করুন
আমরা ExoPlayer লাইব্রেরির সাম্প্রতিকতম সংস্করণ ব্যবহার করতে আপনার প্রোজেক্ট আপডেট করার পরামর্শ দিই এবং যেকোনও কল অপসারিত পদ্ধতিতে সরিয়ে ফেলুন। আপনি যদি স্থানান্তরের জন্য স্ক্রিপ্টটি ব্যবহার করতে চান, তাহলে আপনাকে স্ক্রিপ্ট দ্বারা পরিচালিত সংস্করণের সাথে আপডেট করা সংস্করণের সাথে মেলাতে হবে৷
আপনার অ্যাপের compileSdkVersion কমপক্ষে 32 এ বাড়ান।
গ্রেডল এবং অ্যান্ড্রয়েড স্টুডিও গ্রেডল প্লাগইনকে সাম্প্রতিক সংস্করণে আপগ্রেড করুন যা উপরে থেকে আপডেট হওয়া নির্ভরতাগুলির সাথে কাজ করে। উদাহরণস্বরূপ:
- অ্যান্ড্রয়েড গ্রেডল প্লাগইন সংস্করণ: 7.1.0
- গ্রেডল সংস্করণ: 7.4
সমস্ত ওয়াইল্ডকার্ড আমদানি বিবৃতিগুলি প্রতিস্থাপন করুন যা একটি অ্যাসটেরিক্স (*) ব্যবহার করছে এবং সম্পূর্ণরূপে যোগ্য আমদানি বিবৃতি ব্যবহার করুন: ওয়াইল্ডকার্ড আমদানি বিবৃতিগুলি মুছুন এবং সম্পূর্ণরূপে-যোগ্য বিবৃতিগুলি আমদানি করতে অ্যান্ড্রয়েড স্টুডিও ব্যবহার করুন (F2 - Alt/Enter, F2 - Alt/Enter, . ..)
com.google.android.exoplayer2.PlayerView
থেকেcom.google.android.exoplayer2.StyledPlayerView
এ স্থানান্তর করুন । এটি প্রয়োজনীয় কারণ AndroidX Media3 এcom.google.android.exoplayer2.PlayerView
এর সমতুল্য নেই।
স্ক্রিপ্ট সমর্থন সহ ExoPlayer মাইগ্রেট করুন
স্ক্রিপ্টটি com.google.android.exoplayer2
থেকে androidx.media3
অধীনে নতুন প্যাকেজ এবং মডিউল কাঠামোতে স্থানান্তরিত করতে সহায়তা করে। স্ক্রিপ্টটি আপনার প্রকল্পে কিছু বৈধতা পরীক্ষা প্রয়োগ করে এবং বৈধতা ব্যর্থ হলে সতর্কতা প্রিন্ট করে। অন্যথায়, এটি জাভা বা কোটলিনে লেখা একটি অ্যান্ড্রয়েড গ্রেডল প্রকল্পের সংস্থানগুলিতে পুনঃনামকরণ করা ক্লাস এবং প্যাকেজগুলির ম্যাপিংগুলি প্রয়োগ করে৷
usage: ./media3-migration.sh [-p|-c|-d|-v]|[-m|-l [-x <path>] [-f] PROJECT_ROOT]
PROJECT_ROOT: path to your project root (location of 'gradlew')
-p: list package mappings and then exit
-c: list class mappings (precedence over package mappings) and then exit
-d: list dependency mappings and then exit
-l: list files that will be considered for rewrite and then exit
-x: exclude the path from the list of file to be changed: 'app/src/test'
-m: migrate packages, classes and dependencies to AndroidX Media3
-f: force the action even when validation fails
-v: print the exoplayer2/media3 version strings of this script
-h, --help: show this help text
মাইগ্রেশন স্ক্রিপ্ট ব্যবহার করে
GitHub-এ ExoPlayer প্রোজেক্টের ট্যাগ থেকে মাইগ্রেশন স্ক্রিপ্ট ডাউনলোড করুন যে সংস্করণে আপনি আপনার অ্যাপ আপডেট করেছেন:
curl -o media3-migration.sh \ "https://raw.githubusercontent.com/google/ExoPlayer/r2.19.1/media3-migration.sh"
স্ক্রিপ্ট এক্সিকিউটেবল করুন:
chmod 744 media3-migration.sh
বিকল্পগুলি সম্পর্কে জানতে
--help
দিয়ে স্ক্রিপ্টটি চালান।মাইগ্রেশনের জন্য নির্বাচিত ফাইলগুলির সেট তালিকাভুক্ত করতে
-l
দিয়ে স্ক্রিপ্টটি চালান (সতর্কতা ছাড়াই তালিকা জোর করতে-f
ব্যবহার করুন):./media3-migration.sh -l -f /path/to/gradle/project/root
Media3-তে প্যাকেজ, ক্লাস এবং মডিউল ম্যাপ করতে
-m
দিয়ে স্ক্রিপ্ট চালান।-m
বিকল্পের সাহায্যে স্ক্রিপ্ট চালানো হলে নির্বাচিত ফাইলগুলিতে পরিবর্তন প্রযোজ্য হবে।- পরিবর্তন না করেই বৈধতা ত্রুটি বন্ধ করুন
./media3-migration.sh -m /path/to/gradle/project/root
- জোরপূর্বক মৃত্যুদণ্ড
যদি স্ক্রিপ্টটি পূর্বশর্তগুলির লঙ্ঘন খুঁজে পায়, তাহলে
-f
পতাকা দিয়ে মাইগ্রেশন বাধ্য করা যেতে পারে:./media3-migration.sh -m -f /path/to/gradle/project/root
# list files selected for migration when excluding paths
./media3-migration.sh -l -x "app/src/test/" -x "service/" /path/to/project/root
# migrate the selected files
./media3-migration.sh -m -x "app/src/test/" -x "service/" /path/to/project/root
-m
বিকল্পের সাথে স্ক্রিপ্ট চালানোর পরে এই ম্যানুয়াল পদক্ষেপগুলি সম্পূর্ণ করুন:
- স্ক্রিপ্টটি কীভাবে আপনার কোড পরিবর্তন করেছে তা পরীক্ষা করুন : একটি ডিফ টুল ব্যবহার করুন এবং সম্ভাব্য সমস্যাগুলি সমাধান করুন (যদি আপনি মনে করেন যে স্ক্রিপ্টটিতে একটি সাধারণ সমস্যা রয়েছে যা
-f
বিকল্পটি পাস না করেই চালু করা হয়েছিল তবে একটি বাগ ফাইল করার কথা বিবেচনা করুন)। - প্রকল্পটি তৈরি করুন : হয়
./gradlew clean build
ব্যবহার করুন বা অ্যান্ড্রয়েড স্টুডিওতে Gradle ফাইলগুলির সাথে ফাইল > সিঙ্ক প্রজেক্ট বেছে নিন, তারপরে বিল্ড > ক্লিন প্রজেক্ট এবং তারপরে বিল্ড > রিবিল্ড প্রজেক্ট ( 'বিল্ড - বিল্ড আউটপুট' ট্যাবে আপনার বিল্ড মনিটর করুন) অ্যান্ড্রয়েড স্টুডিও ।
প্রস্তাবিত ফলো-আপ পদক্ষেপ:
- অস্থির API ব্যবহার সংক্রান্ত ত্রুটির জন্য অপ্ট-ইন সমাধান করুন৷
- অপ্রচলিত API কলগুলি প্রতিস্থাপন করুন : প্রস্তাবিত প্রতিস্থাপন API ব্যবহার করুন৷ অ্যান্ড্রয়েড স্টুডিওতে সতর্কতার উপরে পয়েন্টারটি ধরে রাখুন এবং প্রদত্ত কলের পরিবর্তে কী ব্যবহার করবেন তা খুঁজে বের করতে অবচয়িত প্রতীকের JavaDoc-এর সাথে পরামর্শ করুন।
- আমদানি বিবৃতিগুলি সাজান : অ্যান্ড্রয়েড স্টুডিওতে প্রকল্পটি খুলুন, তারপরে প্রজেক্ট ভিউয়ারে একটি প্যাকেজ ফোল্ডার নোডে ডান-ক্লিক করুন এবং পরিবর্তিত উত্স ফাইলগুলি ধারণ করে প্যাকেজগুলিতে অপ্টিমাইজ আমদানি নির্বাচন করুন৷
MediaSessionConnector
androidx.media3.session.MediaSession
দিয়ে প্রতিস্থাপন করুন
লিগ্যাসি MediaSessionCompat
বিশ্বে, MediaSessionConnector
প্লেয়ারের অবস্থাকে সেশনের অবস্থার সাথে সিঙ্ক করার জন্য এবং উপযুক্ত প্লেয়ার পদ্ধতিতে প্রতিনিধিত্বের প্রয়োজন এমন নিয়ন্ত্রকদের কাছ থেকে আদেশ পাওয়ার জন্য দায়ী ছিল। অ্যান্ড্রয়েডএক্স মিডিয়া3 এর সাথে, এটি সরাসরি MediaSession
দ্বারা কোনও সংযোগকারীর প্রয়োজন ছাড়াই করা হয়৷
MediaSessionConnector-এর সমস্ত রেফারেন্স এবং ব্যবহার মুছে ফেলুন: আপনি যদি ExoPlayer ক্লাস এবং প্যাকেজগুলি স্থানান্তর করতে স্বয়ংক্রিয় স্ক্রিপ্ট ব্যবহার করেন, তাহলে স্ক্রিপ্টটি সম্ভবত
MediaSessionConnector
সংক্রান্ত আপনার কোডটিকে একটি অসংলগ্ন অবস্থায় রেখে গেছে যা সমাধান করা যাবে না। আপনি যখন অ্যাপ তৈরি বা শুরু করার চেষ্টা করবেন তখন অ্যান্ড্রয়েড স্টুডিও আপনাকে ভাঙা কোড দেখাবে।build.gradle
ফাইলে যেখানে আপনি আপনার নির্ভরতা বজায় রাখেন, AndroidX Media3 সেশন মডিউলে একটি বাস্তবায়ন নির্ভরতা যোগ করুন এবং উত্তরাধিকার নির্ভরতা সরিয়ে দিন:implementation "androidx.media3:media3-session:1.5.0"
MediaSessionCompat
androidx.media3.session.MediaSession
দিয়ে প্রতিস্থাপন করুন।যে কোড সাইটে আপনি লিগ্যাসি
MediaSessionCompat
তৈরি করেছেন, সেখানে একটিMediaSession
তৈরি করতেandroidx.media3.session.MediaSession.Builder
ব্যবহার করুন। সেশন বিল্ডার তৈরি করতে প্লেয়ারকে পাস করুন ।val player = ExoPlayer.Builder(context).build() mediaSession = MediaSession.Builder(context, player) .setSessionCallback(MySessionCallback()) .build()
আপনার অ্যাপের প্রয়োজন অনুযায়ী
MySessionCallback
প্রয়োগ করুন। এটি ঐচ্ছিক। আপনি প্লেয়ারে মিডিয়া আইটেম যোগ করার জন্য কন্ট্রোলারদের অনুমতি দিতে চাইলে,MediaSession.Callback.onAddMediaItems()
প্রয়োগ করুন। এটি বিভিন্ন বর্তমান এবং লিগ্যাসি API পদ্ধতিগুলি পরিবেশন করে যা প্লেয়ারে প্লেব্যাকের জন্য একটি পিছনের সামঞ্জস্যপূর্ণ উপায়ে মিডিয়া আইটেম যুক্ত করে। এর মধ্যে রয়েছে Media3 কন্ট্রোলারেরMediaController.set/addMediaItems()
পদ্ধতি, সেইসাথে লিগ্যাসি API-এরTransportControls.prepareFrom*/playFrom*
পদ্ধতি।onAddMediaItems
এর একটি নমুনা বাস্তবায়ন সেশন ডেমো অ্যাপেরPlaybackService
পাওয়া যাবে।কোড সাইটে মিডিয়া সেশনটি প্রকাশ করুন যেখানে আপনি মাইগ্রেশনের আগে আপনার সেশনটি ধ্বংস করেছিলেন:
mediaSession?.run { player.release() release() mediaSession = null }
Media3 এ MediaSessionConnector
কার্যকারিতা
নিম্নলিখিত সারণীটি Media3 API গুলি দেখায় যা পূর্বে MediaSessionConnector
এ প্রয়োগ করা কার্যকারিতা পরিচালনা করে।
মিডিয়া সেশন সংযোগকারী | অ্যান্ড্রয়েডএক্স মিডিয়া3 |
---|---|
CustomActionProvider | MediaSession.Callback.onCustomCommand()/ MediaSession.setCustomLayout() |
PlaybackPreparer | MediaSession.Callback.onAddMediaItems() ( prepare() অভ্যন্তরীণভাবে বলা হয়) |
QueueNavigator | ForwardingSimpleBasePlayer |
QueueEditor | MediaSession.Callback.onAddMediaItems() |
RatingCallback | MediaSession.Callback.onSetRating() |
PlayerNotificationManager | DefaultMediaNotificationProvider/ MediaNotification.Provider |
MediaBrowserService
MediaLibraryService
এ স্থানান্তর করুন
AndroidX Media3 MediaLibraryService
প্রবর্তন করেছে যা MediaBrowserServiceCompat
প্রতিস্থাপন করে। MediaLibraryService
এর JavaDoc এবং এর সুপার ক্লাস MediaSessionService
API এবং পরিষেবাটির অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং মডেলের মধ্যে একটি ভাল ভূমিকা প্রদান করে।
MediaLibraryService
পিছনের দিকে MediaBrowserService
এর সাথে সামঞ্জস্যপূর্ণ। একটি ক্লায়েন্ট অ্যাপ যা MediaBrowserCompat
বা MediaControllerCompat
ব্যবহার করছে, একটি MediaLibraryService
এর সাথে সংযোগ করার সময় কোড পরিবর্তন ছাড়াই কাজ করতে থাকে। একটি ক্লায়েন্টের জন্য, আপনার অ্যাপটি একটি MediaLibraryService
ব্যবহার করছে বা একটি লিগ্যাসি MediaBrowserServiceCompat
ব্যবহার করছে কিনা তা স্বচ্ছ৷
কাজ করার জন্য পিছনের সামঞ্জস্যের জন্য, আপনাকে
AndroidManifest.xml
এ আপনার পরিষেবার সাথে উভয় পরিষেবা ইন্টারফেস নিবন্ধন করতে হবে। এইভাবে একজন ক্লায়েন্ট প্রয়োজনীয় পরিষেবা ইন্টারফেস দ্বারা আপনার পরিষেবা খুঁজে পায়:<service android:name=".MusicService" android:exported="true"> <intent-filter> <action android:name="androidx.media3.session.MediaLibraryService"/> <action android:name="android.media.browse.MediaBrowserService" /> </intent-filter> </service>
build.gradle
ফাইলে যেখানে আপনি আপনার নির্ভরতা বজায় রাখেন, AndroidX Media3 সেশন মডিউলে একটি বাস্তবায়ন নির্ভরতা যোগ করুন এবং উত্তরাধিকার নির্ভরতা সরিয়ে দিন:implementation "androidx.media3:media3-session:1.5.0"
MediaBrowserService
এর পরিবর্তে একটিMediaLibraryService
থেকে উত্তরাধিকারসূত্রে আপনার পরিষেবা পরিবর্তন করুন যেমনটি আগে বলা হয়েছে,MediaLibraryService
উত্তরাধিকারMediaBrowserService
সাথে সামঞ্জস্যপূর্ণ। তদনুসারে, ক্লায়েন্টদের কাছে পরিষেবাটি যে বিস্তৃত API অফার করছে তা এখনও একই। তাই সম্ভবতMediaBrowserService
বাস্তবায়নের জন্য এবং নতুনMediaLibraryService
এর জন্য এটিকে মানিয়ে নেওয়ার জন্য প্রয়োজনীয় যুক্তিগুলির বেশিরভাগই একটি অ্যাপ রাখতে পারে।লিগ্যাসি
MediaBrowserServiceCompat
এর তুলনায় প্রধান পার্থক্যগুলি নিম্নরূপ:পরিষেবা জীবন-চক্র পদ্ধতিগুলি প্রয়োগ করুন: পরিষেবাতে যে পদ্ধতিগুলিকে ওভাররাইড করতে হবে তা হল
onCreate/onDestroy
, যেখানে একটি অ্যাপ লাইব্রেরি সেশন, প্লেয়ার এবং অন্যান্য সংস্থানগুলি বরাদ্দ/রিলিজ করে৷ স্ট্যান্ডার্ড সার্ভিস লাইফ-সাইকেল পদ্ধতির পাশাপাশি,onCreate
এ নির্মিতMediaLibrarySession
ফিরিয়ে আনতে একটি অ্যাপকেonGetSession(MediaSession.ControllerInfo)
ওভাররাইড করতে হবে।MediaLibraryService.MediaLibrarySessionCallback প্রয়োগ করুন: একটি সেশন তৈরি করতে একটি
MediaLibraryService.MediaLibrarySessionCallback
প্রয়োজন যা প্রকৃত ডোমেন API পদ্ধতিগুলি প্রয়োগ করে৷ সুতরাং উত্তরাধিকার পরিষেবার API পদ্ধতিগুলিকে ওভাররাইড করার পরিবর্তে, আপনি পরিবর্তেMediaLibrarySession.Callback
এর পদ্ধতিগুলিকে ওভাররাইড করবেন৷কলব্যাকটি তখন
MediaLibrarySession
তৈরি করতে ব্যবহৃত হয়:mediaLibrarySession = MediaLibrarySession.Builder(this, player, MySessionCallback()) .build()
API ডকুমেন্টেশনে MediaLibrarySessionCallback-এর সম্পূর্ণ API খুঁজুন।
MediaSession.Callback.onAddMediaItems()
প্রয়োগ করুন : কলব্যাকonAddMediaItems(MediaSession, ControllerInfo, List<MediaItem>)
বিভিন্ন বর্তমান এবং লিগ্যাসি API পদ্ধতিগুলি পরিবেশন করে যা প্লেব্যাকের জন্য মিডিয়া আইটেমগুলিকে পিছনের দিকে সামঞ্জস্যপূর্ণ উপায়ে প্লেব্যাকের জন্য যোগ করে৷ এর মধ্যে রয়েছে Media3 কন্ট্রোলারেরMediaController.set/addMediaItems()
পদ্ধতি, সেইসাথে লিগ্যাসি API-এরTransportControls.prepareFrom*/playFrom*
পদ্ধতি। কলব্যাকের একটি নমুনা বাস্তবায়ন সেশন ডেমো অ্যাপেরPlaybackService
পাওয়া যাবে।AndroidX Media3 MediaBrowserCompat.MediaItem এবং MediaMetadataCompat এর পরিবর্তে
androidx.media3.common.MediaItem
ব্যবহার করছে। লিগ্যাসি ক্লাসের সাথে আবদ্ধ আপনার কোডের অংশগুলি সেই অনুযায়ী পরিবর্তন করতে হবে বা পরিবর্তে Media3MediaItem
এ ম্যাপ করতে হবে।MediaBrowserServiceCompat
এর বিচ্ছিন্নযোগ্যResult
পদ্ধতির বিপরীতে সাধারণ অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং মডেলটিFutures
পরিবর্তিত হয়েছে । আপনার পরিষেবা বাস্তবায়ন ফলাফল বিচ্ছিন্ন করার পরিবর্তে একটি অ্যাসিঙ্ক্রোনাসListenableFuture
ফেরত দিতে পারে বা সরাসরি একটি মান ফেরত দিতে একটি অবিলম্বে ভবিষ্যত ফেরত দিতে পারে ।
PlayerNotificationManager সরান
MediaLibraryService
স্বয়ংক্রিয়ভাবে মিডিয়া বিজ্ঞপ্তি সমর্থন করে এবং একটি MediaLibraryService
বা MediaSessionService
ব্যবহার করার সময় PlayerNotificationManager
সরানো যেতে পারে।
একটি অ্যাপ onCreate()
এ একটি কাস্টম MediaNotification.Provider
সেট করে বিজ্ঞপ্তিটি কাস্টমাইজ করতে পারে যা DefaultMediaNotificationProvider
প্রতিস্থাপন করে। MediaLibraryService
তারপর প্রয়োজন অনুযায়ী অগ্রভাগে পরিষেবা শুরু করার যত্ন নেয়।
MediaLibraryService.updateNotification()
ওভাররাইড করার মাধ্যমে একটি অ্যাপ আরও একটি বিজ্ঞপ্তি পোস্ট করার এবং প্রয়োজন অনুসারে অগ্রভাগে পরিষেবাটি শুরু/বন্ধ করার সম্পূর্ণ মালিকানা নিতে পারে।
একটি MediaBrowser ব্যবহার করে ক্লায়েন্ট কোড মাইগ্রেট করুন
AndroidX Media3 এর সাথে, একটি MediaBrowser
MediaController/Player
ইন্টারফেস প্রয়োগ করে এবং মিডিয়া লাইব্রেরি ব্রাউজ করার পাশাপাশি মিডিয়া প্লেব্যাক নিয়ন্ত্রণ করতে ব্যবহার করা যেতে পারে। যদি আপনাকে উত্তরাধিকার জগতে একটি MediaBrowserCompat
এবং একটি MediaControllerCompat
তৈরি করতে হয়, আপনি শুধুমাত্র Media3-এ MediaBrowser
ব্যবহার করে একই কাজ করতে পারেন।
একটি MediaBrowser
তৈরি করা যেতে পারে এবং পরিষেবার সাথে সংযোগ স্থাপনের জন্য অপেক্ষা করা যেতে পারে:
scope.launch {
val sessionToken =
SessionToken(context, ComponentName(context, MusicService::class.java)
browser =
MediaBrowser.Builder(context, sessionToken))
.setListener(BrowserListener())
.buildAsync()
.await()
// Get the library root to start browsing the library.
root = browser.getLibraryRoot(/* params= */ null).await();
// Add a MediaController.Listener to listen to player state events.
browser.addListener(playerListener)
playerView.setPlayer(browser)
}
ব্যাকগ্রাউন্ডে প্লেব্যাক নিয়ন্ত্রণের জন্য কীভাবে MediaController
তৈরি করবেন তা শিখতে মিডিয়া সেশনে কন্ট্রোল প্লেব্যাক দেখুন।
আরও পদক্ষেপ এবং পরিষ্কার করুন
অস্থির API ত্রুটি৷
Media3 এ স্থানান্তরিত করার পরে, আপনি অস্থির API ব্যবহার সম্পর্কে লিন্ট ত্রুটি দেখতে পারেন। এই APIগুলি ব্যবহার করা নিরাপদ এবং লিন্ট ত্রুটিগুলি আমাদের নতুন বাইনারি সামঞ্জস্যতার গ্যারান্টিগুলির একটি উপজাত৷ আপনার যদি কঠোর বাইনারি সামঞ্জস্যের প্রয়োজন না হয়, তাহলে এই ত্রুটিগুলিকে @OptIn
টীকা দিয়ে নিরাপদে দমন করা যেতে পারে।
পটভূমি
ExoPlayer v1 বা v2 উভয়ই পরবর্তী সংস্করণগুলির মধ্যে লাইব্রেরির বাইনারি সামঞ্জস্য সম্পর্কে কঠোর গ্যারান্টি প্রদান করেনি। অ্যাপগুলিকে প্লেব্যাকের প্রায় প্রতিটি দিক কাস্টমাইজ করার অনুমতি দেওয়ার জন্য ExoPlayer API পৃষ্ঠটি ডিজাইনের দ্বারা খুব বড়। ExoPlayer-এর পরবর্তী সংস্করণগুলি মাঝে মাঝে প্রতীক পরিবর্তন বা অন্যান্য ব্রেকিং পরিবর্তন (যেমন ইন্টারফেসে নতুন প্রয়োজনীয় পদ্ধতি) প্রবর্তন করবে। ডেভেলপারদের তাদের ব্যবহার স্থানান্তর করার জন্য সময় দেওয়ার জন্য কয়েকটি সংস্করণের জন্য পুরানো চিহ্নটিকে অবমূল্যায়ন করার পাশাপাশি নতুন প্রতীক প্রবর্তনের মাধ্যমে বেশিরভাগ ক্ষেত্রে এই ভাঙনগুলি হ্রাস করা হয়েছিল, তবে এটি সর্বদা সম্ভব ছিল না।
এই ব্রেকিং পরিবর্তনগুলির ফলে ExoPlayer v1 এবং v2 লাইব্রেরির ব্যবহারকারীদের জন্য দুটি সমস্যা হয়েছে:
- ExoPlayer সংস্করণ থেকে একটি আপগ্রেড কোড কম্পাইল করা বন্ধ করতে পারে।
- একটি অ্যাপ যা সরাসরি এবং একটি মধ্যবর্তী লাইব্রেরির মাধ্যমে ExoPlayer-এর উপর নির্ভর করে তা নিশ্চিত করতে হবে যে উভয় নির্ভরতা একই সংস্করণ, অন্যথায় বাইনারি অসঙ্গতি রানটাইম ক্র্যাশ হতে পারে।
মিডিয়া3 এর উন্নতি
Media3 API পৃষ্ঠের একটি উপসেটের জন্য বাইনারি সামঞ্জস্যের গ্যারান্টি দেয়। যে অংশগুলি বাইনারি সামঞ্জস্যের গ্যারান্টি দেয় না সেগুলি @UnstableApi
দিয়ে চিহ্নিত করা হয়েছে। এই পার্থক্যটি পরিষ্কার করার জন্য, অস্থির API চিহ্নগুলির ব্যবহার একটি লিন্ট ত্রুটি তৈরি করে যদি না সেগুলি @OptIn
এর সাথে টীকা করা হয়।
ExoPlayer v2 থেকে Media3 তে স্থানান্তর করার পরে, আপনি অনেক অস্থির API লিন্ট ত্রুটি দেখতে পারেন। এটি মনে হতে পারে যে Media3 ExoPlayer v2 এর তুলনায় 'কম স্থিতিশীল'। এই ব্যাপারটা নয়। Media3 API-এর 'অস্থির' অংশগুলিতে সমগ্র ExoPlayer v2 API পৃষ্ঠের সমান স্থিতিশীলতা রয়েছে এবং স্থিতিশীল Media3 API পৃষ্ঠের গ্যারান্টিগুলি ExoPlayer v2-এ একেবারেই উপলব্ধ নয়৷ পার্থক্য হল একটি লিন্ট ত্রুটি এখন আপনাকে বিভিন্ন স্তরের স্থিতিশীলতার বিষয়ে সতর্ক করে।
অস্থির API লিন্ট ত্রুটিগুলি পরিচালনা করুন
@OptIn
সাথে অস্থির API-এর Java এবং Kotlin ব্যবহার কীভাবে টীকা করা যায় তার বিশদ বিবরণের জন্য এই লিন্ট ত্রুটিগুলির সমস্যা সমাধান বিভাগটি দেখুন।
অপ্রচলিত API
আপনি লক্ষ্য করতে পারেন যে অ্যান্ড্রয়েড স্টুডিওতে অননুমোদিত API-তে কল করা হয়। আমরা উপযুক্ত বিকল্প সঙ্গে এই ধরনের কল প্রতিস্থাপন সুপারিশ. JavaDoc দেখতে চিহ্নের উপর হোভার করুন যা তার পরিবর্তে কোন API ব্যবহার করতে হবে তা বলে।
কোড নমুনা এবং ডেমো অ্যাপ্লিকেশন
- AndroidX Media3 সেশন ডেমো অ্যাপ (মোবাইল এবং WearOS)
- কাস্টম অ্যাকশন
- সিস্টেম UI বিজ্ঞপ্তি, MediaButton/BT
- গুগল সহকারী প্লেব্যাক নিয়ন্ত্রণ
- ইউএএমপি: অ্যান্ড্রয়েড মিডিয়া প্লেয়ার (শাখা মিডিয়া3) (মোবাইল, অটোমোটিভওএস)
- সিস্টেম UI বিজ্ঞপ্তি, MediaButton/BT, প্লেব্যাক পুনঃসূচনা
- Google সহকারী/WearOS প্লেব্যাক নিয়ন্ত্রণ
- AutomotiveOS: কাস্টম কমান্ড এবং সাইন-ইন