একটি মিডিয়া কন্ট্রোলার একটি মিডিয়া অ্যাপের প্লেব্যাক অনুসন্ধান এবং নিয়ন্ত্রণ করতে একটি মিডিয়া সেশনের সাথে যোগাযোগ করে৷ Media3-তে, MediaController
API Player
ইন্টারফেস প্রয়োগ করে। মিডিয়া কন্ট্রোলার ব্যবহার করে এমন ক্লায়েন্ট অ্যাপের উদাহরণগুলির মধ্যে রয়েছে:
- অ্যান্ড্রয়েড সিস্টেম মিডিয়া নিয়ন্ত্রণ
- Android Wear OS সহচর অ্যাপ
- অ্যান্ড্রয়েড অটো এবং অটোমোটিভ ওএস
- ভয়েস সহকারী, যেমন Google সহকারী
- মিডিয়া কন্ট্রোলার টেস্ট অ্যাপ
একটি মিডিয়া কন্ট্রোলার একটি মিডিয়া অ্যাপের মধ্যেও কার্যকর হতে পারে, উদাহরণস্বরূপ যদি প্লেয়ার এবং মিডিয়া সেশনটি UI এর সাথে Activity
বা Fragment
থেকে আলাদা একটি Service
থাকে।
একটি MediaController
তৈরি করুন
একটি MediaController
তৈরি করতে, সংশ্লিষ্ট MediaSession
এর জন্য একটি SessionToken
তৈরি করে শুরু করুন। আপনার Activity
বা Fragment
onStart()
পদ্ধতি এটির জন্য একটি ভাল জায়গা হতে পারে।
কোটলিন
val sessionToken = SessionToken(context, ComponentName(context, PlaybackService::class.java))
জাভা
SessionToken sessionToken = new SessionToken(context, new ComponentName(context, PlaybackService.class));
একটি MediaController
তৈরি করতে এই SessionToken
ব্যবহার করে প্রদত্ত সেশনের সাথে নিয়ামককে সংযুক্ত করে। এটি অ্যাসিঙ্ক্রোনাসভাবে সঞ্চালিত হয়, তাই আপনার ফলাফলের জন্য শোনা উচিত এবং উপলব্ধ হলে এটি ব্যবহার করা উচিত।
কোটলিন
val controllerFuture = MediaController.Builder(context, sessionToken).buildAsync() controllerFuture.addListener({ // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor())
জাভা
ListenableFuture<MediaController> controllerFuture = new MediaController.Builder(context, sessionToken).buildAsync(); controllerFuture.addListener(() -> { // MediaController is available here with controllerFuture.get() }, MoreExecutors.directExecutor());
একটি MediaController
ব্যবহার করুন
MediaController
Player
ইন্টারফেস প্রয়োগ করে, তাই আপনি সংযুক্ত MediaSession
প্লেব্যাক নিয়ন্ত্রণ করতে ইন্টারফেসে সংজ্ঞায়িত কমান্ডগুলি ব্যবহার করতে পারেন। এটা বলা যায় যে MediaController
play()
কল করা কমান্ডটি সংযুক্ত MediaSession
এ পাঠাবে, যা পরবর্তীতে তার অন্তর্নিহিত Player
কমান্ড অর্পণ করবে।
একইভাবে, আপনি Player
অবস্থার পরিবর্তনের জন্য কন্ট্রোলারে একটি Player.Listener
যোগ করতে পারেন। Player.Listener
ব্যবহার করার বিষয়ে আরো বিস্তারিত জানার জন্য প্লেয়ার ইভেন্ট গাইড পড়ুন। MediaController.Listener
ইন্টারফেস সংযুক্ত MediaSession
থেকে ইভেন্ট এবং ইনকামিং কমান্ডের জন্য অতিরিক্ত কলব্যাক সংজ্ঞায়িত করে, যেমন onAvailableSessionCommandsChanged()
যখন মিডিয়া সেশন উপলব্ধ সেশন কমান্ড পরিবর্তন করে এবং যখন কন্ট্রোলার সেশন থেকে সংযোগ বিচ্ছিন্ন হয় তার জন্য onDisconnected()
।
অন্যান্য উপাদানগুলির মতো, MediaController
ছেড়ে দিতে ভুলবেন না যখন এটির আর প্রয়োজন হয় না, যেমন একটি Activity
বা Fragment
onStop()
পদ্ধতিতে।
কোটলিন
MediaController.releaseFuture(controllerFuture)
জাভা
MediaController.releaseFuture(controllerFuture);
কন্ট্রোলার রিলিজ করলেও সেশনে প্রেরিত সমস্ত মুলতুবি কমান্ড সরবরাহ করা হবে এবং শুধুমাত্র একবার এই কমান্ডগুলি পরিচালনা করা হলে বা একটি সময়সীমার পরে, যেটি প্রথমে ঘটবে সেশন পরিষেবা থেকে আবদ্ধ হবে।
একটি MediaBrowser
তৈরি করুন এবং ব্যবহার করুন
মিডিয়া অ্যাপের MediaLibraryService
দ্বারা অফার করা মিডিয়া লাইব্রেরি ব্রাউজিং সক্ষম করতে একটি MediaBrowser
একটি MediaController
দ্বারা প্রদত্ত ক্ষমতাগুলির উপরে তৈরি করে৷
কোটলিন
val browserFuture = MediaBrowser.Builder(context, sessionToken).buildAsync() browserFuture.addListener({ // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor())
জাভা
ListenableFuture<MediaBrowser> browserFuture = new MediaBrowser.Builder(context, sessionToken).buildAsync(); browserFuture.addListener(() -> { // MediaBrowser is available here with browserFuture.get() }, MoreExecutors.directExecutor());
মিডিয়া অ্যাপের কন্টেন্ট লাইব্রেরি ব্রাউজ করা শুরু করতে, প্রথমে getLibraryRoot()
দিয়ে রুট নোডটি পুনরুদ্ধার করুন:
কোটলিন
// Get the library root to start browsing the library tree. val rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null) rootFuture.addListener({ // Root node MediaItem is available here with rootFuture.get().value }, MoreExecutors.directExecutor())
জাভা
// Get the library root to start browsing the library tree. ListenableFuture<LibraryResult<MediaItem>> rootFuture = mediaBrowser.getLibraryRoot(/* params= */ null); rootFuture.addListener(() -> { // Root node MediaItem is available here with rootFuture.get().value }, MoreExecutors.directExecutor());
তারপর আপনি getChildren()
এর মাধ্যমে লাইব্রেরির একটি MediaItem
এর বাচ্চাদের পুনরুদ্ধার করে মিডিয়া লাইব্রেরির মাধ্যমে নেভিগেট করতে পারেন। উদাহরণস্বরূপ, রুট নোডের বাচ্চাদের পুনরুদ্ধার করতে MediaItem
:
কোটলিন
// Get the library root to start browsing the library tree. val childrenFuture = mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Int.MAX_VALUE, null) childrenFuture.addListener({ // List of children MediaItem nodes is available here with // childrenFuture.get().value }, MoreExecutors.directExecutor())
জাভা
ListenableFuture<LibraryResult<ImmutableList<MediaItem>>> childrenFuture = mediaBrowser.getChildren(rootMediaItem.mediaId, 0, Integer.MAX_VALUE, null); childrenFuture.addListener(() -> { // List of children MediaItem nodes is available here with // childrenFuture.get().value }, MoreExecutors.directExecutor());