একটি মিডিয়া অ্যাপের সাথে সংযোগ করার দুটি উপায় রয়েছে:
-
MediaController -
MediaBrowser
MediaController
একটি মিডিয়া কন্ট্রোলার একটি মিডিয়া অ্যাপের প্লেব্যাক জিজ্ঞাসা এবং নিয়ন্ত্রণ করার জন্য একটি মিডিয়া সেশনের সাথে ইন্টারঅ্যাক্ট করে। Media3-তে, MediaController API Player ইন্টারফেস প্রয়োগ করে। মিডিয়া কন্ট্রোলার ব্যবহার করে এমন ক্লায়েন্ট অ্যাপের উদাহরণগুলির মধ্যে রয়েছে:
- অ্যান্ড্রয়েড সিস্টেম মিডিয়া নিয়ন্ত্রণ
- Android Wear OS কম্প্যানিয়ন অ্যাপ
- অ্যান্ড্রয়েড অটো এবং অটোমোটিভ অপারেটিং সিস্টেম
- ভয়েস অ্যাসিস্ট্যান্ট, যেমন গুগল অ্যাসিস্ট্যান্ট
- মিডিয়া কন্ট্রোলার টেস্ট অ্যাপ
একটি মিডিয়া অ্যাপের মধ্যেও একটি মিডিয়া কন্ট্রোলার কার্যকর হতে পারে, উদাহরণস্বরূপ, যদি প্লেয়ার এবং মিডিয়া সেশন 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));
এই SessionToken ব্যবহার করে একটি MediaController তৈরি করলে কন্ট্রোলারটি প্রদত্ত সেশনের সাথে সংযুক্ত হয়। এটি অ্যাসিঙ্ক্রোনাসভাবে ঘটে, তাই আপনার ফলাফল শোনা উচিত এবং যখনই পাওয়া যাবে তখন এটি ব্যবহার করা উচিত।
কোটলিন
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 ব্যবহার সম্পর্কে আরও বিস্তারিত জানার জন্য Player ইভেন্ট গাইডটি দেখুন।
MediaController.Listener ইন্টারফেস সংযুক্ত MediaSession থেকে ইভেন্ট এবং কাস্টম কমান্ডের জন্য অতিরিক্ত কলব্যাক সংজ্ঞায়িত করে। উদাহরণ হল onCustomCommand() যখন সেশন একটি কাস্টম কমান্ড পাঠায়, onAvailableSessionCommandsChanged() যখন সেশন উপলব্ধ সেশন কমান্ড পরিবর্তন করে অথবা onDisconnected() যখন কন্ট্রোলার সেশন থেকে সংযোগ বিচ্ছিন্ন হয়।
একটি Builder দিয়ে কন্ট্রোলার তৈরি করার সময় একটি MediaController.Listener সেট করা যেতে পারে:
কোটলিন
MediaController.Builder(context, sessionToken)
.setListener(
object : MediaController.Listener {
override fun onCustomCommand(
controller: MediaController,
command: SessionCommand,
args: Bundle,
): ListenableFuture<SessionResult> {
// Handle custom command.
return Futures.immediateFuture(SessionResult(SessionResult.RESULT_SUCCESS))
}
override fun onDisconnected(controller: MediaController) {
// Handle disconnection.
}
}
)
.buildAsync()
জাভা
new MediaController.Builder(context, sessionToken)
.setListener(
new MediaController.Listener() {
@Override
public ListenableFuture<SessionResult> onCustomCommand(
MediaController controller, SessionCommand command, Bundle args) {
// Handle custom command.
return Futures.immediateFuture(new SessionResult(SessionResult.RESULT_SUCCESS));
}
@Override
public void onDisconnected(MediaController controller) {
// Handle disconnection.
}
})
.buildAsync();
অন্যান্য উপাদানের মতো, যখন আর প্রয়োজন না থাকে, যেমন Activity বা Fragment এর onStop() পদ্ধতিতে, MediaController রিলিজ করতে ভুলবেন না।
কোটলিন
MediaController.releaseFuture(controllerFuture)
জাভা
MediaController.releaseFuture(controllerFuture);
কন্ট্রোলারটি রিলিজ করলেও সেশনে প্রেরিত সমস্ত মুলতুবি কমান্ড সরবরাহ করা হবে এবং এই কমান্ডগুলি পরিচালনা করার পরে অথবা একটি সময়সীমার পরে, যেটি প্রথমে ঘটবে, কেবল সেশন পরিষেবা থেকে আনবাইন্ড করা হবে।
MediaBrowser
একটি মিডিয়া অ্যাপের MediaLibraryService দ্বারা প্রদত্ত মিডিয়া লাইব্রেরি ব্রাউজিং সক্ষম করার জন্য একটি MediaController দ্বারা প্রদত্ত ক্ষমতাগুলির উপরে একটি MediaBrowser তৈরি করে।
একটি MediaBrowser তৈরি করুন
কোটলিন
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());
একটি MediaBrowser ব্যবহার করুন
মিডিয়া অ্যাপের কন্টেন্ট লাইব্রেরি ব্রাউজ করা শুরু করতে, প্রথমে 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());
অন্য মিডিয়া অ্যাপের জন্য প্লেব্যাক নিয়ন্ত্রণগুলি প্রদর্শন করুন
অন্য মিডিয়া অ্যাপের জন্য বোতাম সহ UI নিয়ন্ত্রণ প্রদর্শন করার সময়, সেই অ্যাপের ঘোষিত মিডিয়া বোতাম পছন্দগুলি অনুসরণ করা গুরুত্বপূর্ণ।
অ্যাপের পছন্দ এবং আপনার UI এর সীমাবদ্ধতা এবং প্রয়োজনীয়তাগুলি সমাধান করার সর্বোত্তম উপায় হল CommandButton.DisplayConstraints ব্যবহার করা। আপনি আপনার UI এর সীমা এবং সীমাবদ্ধতা নির্ধারণ করতে পারেন এবং resolve পদ্ধতিটি তাদের আইকন, অবস্থান এবং উদ্দেশ্যমূলক ক্রিয়া সহ প্রদর্শন করার জন্য বোতামগুলির একটি নির্দিষ্ট তালিকা প্রদান করে।