একটি মিডিয়া অ্যাপের সাথে সংযোগ করুন৷

একটি মিডিয়া কন্ট্রোলার একটি মিডিয়া অ্যাপের প্লেব্যাক অনুসন্ধান এবং নিয়ন্ত্রণ করতে একটি মিডিয়া সেশনের সাথে যোগাযোগ করে৷ Media3-তে, MediaController API Player ইন্টারফেস প্রয়োগ করে। মিডিয়া কন্ট্রোলার ব্যবহার করে এমন ক্লায়েন্ট অ্যাপের উদাহরণগুলির মধ্যে রয়েছে:

একটি মিডিয়া কন্ট্রোলার একটি মিডিয়া অ্যাপের মধ্যেও কার্যকর হতে পারে, উদাহরণস্বরূপ যদি প্লেয়ার এবং মিডিয়া সেশনটি 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());