یک کنترلر رسانه با یک جلسه رسانه تعامل دارد تا پخش برنامه رسانه را پرس و جو و کنترل کند. در Media3، MediaController
API رابط Player
را پیاده سازی می کند. نمونه هایی از برنامه های مشتری که از کنترلر رسانه استفاده می کنند عبارتند از:
- کنترل رسانه سیستم اندروید
- برنامه همراه Android Wear OS
- سیستم عامل Android Auto و Automotive
- دستیارهای صوتی، مانند Google Assistant
- اپلیکیشن Media Controller Test
یک کنترلکننده رسانه همچنین میتواند در یک برنامه رسانه مفید باشد، برای مثال اگر پخشکننده و جلسه رسانه در Service
جدا از Activity
یا Fragment
با رابط کاربری زندگی میکنند.
یک MediaController
ایجاد کنید
برای ایجاد MediaController
، با ایجاد SessionToken
برای MediaSession
مربوطه شروع کنید. متد onStart()
Activity
یا Fragment
می تواند مکان خوبی برای این کار باشد.
کاتلین
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
متصل استفاده کنید. به این معنی که فراخوانی play()
در MediaController
دستور را به MediaSession
متصل میفرستد، که متعاقباً دستور را به Player
زیرین خود واگذار میکند.
به طور مشابه، میتوانید یک Player.Listener
به کنترلر اضافه کنید تا به تغییرات در وضعیت Player
گوش دهید. برای جزئیات بیشتر در مورد استفاده از Player.Listener
به راهنمای رویدادهای Player مراجعه کنید. رابط MediaController.Listener
تماسهای اضافی را برای رویدادها و دستورات ورودی از MediaSession
متصل تعریف میکند، مانند onAvailableSessionCommandsChanged()
برای زمانی که جلسه رسانه دستورات جلسه موجود را تغییر میدهد و onDisconnected()
برای زمانی که کنترلر از جلسه جدا میشود.
مانند سایر مؤلفهها، به یاد داشته باشید که MediaController
را زمانی که دیگر مورد نیاز نیست، آزاد کنید، مانند متد onStop()
یک Activity
یا Fragment
.
کاتلین
MediaController.releaseFuture(controllerFuture)
جاوا
MediaController.releaseFuture(controllerFuture);
با آزاد کردن کنترلر، تمام دستورات معلق ارسال شده به جلسه ارسال می شود و فقط پس از مدیریت این دستورات و یا پس از یک دوره وقفه، هرکدام که اول اتفاق بیفتد، از سرویس جلسه خارج می شود.
ایجاد و استفاده از MediaBrowser
MediaBrowser
بر روی قابلیت های ارائه شده توسط MediaController
ساخته می شود تا مرور کتابخانه رسانه ارائه شده توسط MediaLibraryService
یک برنامه رسانه را نیز فعال کند.
کاتلین
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());
سپس میتوانید با بازیابی فرزندان یک MediaItem
در کتابخانه با getChildren()
در کتابخانه رسانه پیمایش کنید. به عنوان مثال، برای بازیابی فرزندان گره ریشه 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());