به یک برنامه رسانه متصل شوید

یک کنترلر رسانه با یک جلسه رسانه تعامل دارد تا پخش برنامه رسانه را پرس و جو و کنترل کند. در Media3، MediaController API رابط Player را پیاده سازی می کند. نمونه هایی از برنامه های مشتری که از کنترلر رسانه استفاده می کنند عبارتند از:

یک کنترل‌کننده رسانه همچنین می‌تواند در یک برنامه رسانه مفید باشد، برای مثال اگر پخش‌کننده و جلسه رسانه در 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());