# MediaBrowser.Listener

Artifact: [androidx.media3:media3-session](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/session/MediaBrowser.java+class:androidx.media3.session.MediaBrowser.Listener)

*** ** * ** ***

<br />

```
public interface MediaBrowser.Listener extends MediaController.Listener
```

<br />

*** ** * ** ***

A listener for events from `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService`.

The methods will be called from the application thread associated with the `https://developer.android.com/reference/androidx/media3/session/MediaController#getApplicationLooper()` of the controller.

## Summary

| ### Public methods |
|---|---|
| `default void` | `https://developer.android.com/reference/androidx/media3/session/MediaBrowser.Listener#onChildrenChanged(androidx.media3.session.MediaBrowser,java.lang.String,int,androidx.media3.session.MediaLibraryService.LibraryParams)( https://developer.android.com/reference/androidx/media3/session/MediaBrowser browser, https://developer.android.com/reference/java/lang/String.html parentId, @https://developer.android.com/reference/androidx/annotation/IntRange(from = 0) int itemCount, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams params )` Called when there's a change in the parent's children after you've subscribed to the parent with `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#subscribe(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |
| `default void` | `https://developer.android.com/reference/androidx/media3/session/MediaBrowser.Listener#onSearchResultChanged(androidx.media3.session.MediaBrowser,java.lang.String,int,androidx.media3.session.MediaLibraryService.LibraryParams)( https://developer.android.com/reference/androidx/media3/session/MediaBrowser browser, https://developer.android.com/reference/java/lang/String.html query, @https://developer.android.com/reference/androidx/annotation/IntRange(from = 0) int itemCount, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams params )` Called when there's change in the search result requested by the previous `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#search(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |

### Inherited methods

From [androidx.media3.session.MediaController.Listener](https://developer.android.com/reference/androidx/media3/session/MediaController.Listener) `default void` `https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onAvailableSessionCommandsChanged(androidx.media3.session.MediaController,androidx.media3.session.SessionCommands)(

https://developer.android.com/reference/androidx/media3/session/MediaController controller,

https://developer.android.com/reference/androidx/media3/session/SessionCommands commands

)`

Called when the available session commands are changed by session.
`default https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<https://developer.android.com/reference/androidx/media3/session/SessionResult>` `https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onCustomCommand(androidx.media3.session.MediaController,androidx.media3.session.SessionCommand,android.os.Bundle)(

https://developer.android.com/reference/androidx/media3/session/MediaController controller,

https://developer.android.com/reference/androidx/media3/session/SessionCommand command,

https://developer.android.com/reference/android/os/Bundle.html args

)`

Called when the session sends a custom command through `https://developer.android.com/reference/androidx/media3/session/MediaSession#sendCustomCommand(androidx.media3.session.MediaSession.ControllerInfo,androidx.media3.session.SessionCommand,android.os.Bundle)`.
`default void` `https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onCustomLayoutChanged(androidx.media3.session.MediaController,java.util.List<androidx.media3.session.CommandButton>)(

https://developer.android.com/reference/androidx/media3/session/MediaController controller,

https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/session/CommandButton> layout

)`

Called when the `https://developer.android.com/reference/androidx/media3/session/MediaController#getCustomLayout()` changed.
`default void` `https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onDisconnected(androidx.media3.session.MediaController)(https://developer.android.com/reference/androidx/media3/session/MediaController controller)`

Called when the controller is disconnected from the session.
`default void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onError(androidx.media3.session.MediaController,androidx.media3.session.SessionError)(https://developer.android.com/reference/androidx/media3/session/MediaController controller, https://developer.android.com/reference/androidx/media3/session/SessionError sessionError)`

Called when an non-fatal error `https://developer.android.com/reference/androidx/media3/session/MediaSession#sendError(androidx.media3.session.MediaSession.ControllerInfo,androidx.media3.session.SessionError)` is received.
`default void` `https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onExtrasChanged(androidx.media3.session.MediaController,android.os.Bundle)(https://developer.android.com/reference/androidx/media3/session/MediaController controller, https://developer.android.com/reference/android/os/Bundle.html extras)`

Called when the session extras are set on the session side.
`default void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onMediaButtonPreferencesChanged(androidx.media3.session.MediaController,java.util.List<androidx.media3.session.CommandButton>)(

https://developer.android.com/reference/androidx/media3/session/MediaController controller,

https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/session/CommandButton> mediaButtonPreferences

)`

Called when the `https://developer.android.com/reference/androidx/media3/session/MediaController#getMediaButtonPreferences()` changed.
`default void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onSessionActivityChanged(androidx.media3.session.MediaController,android.app.PendingIntent)(

https://developer.android.com/reference/androidx/media3/session/MediaController controller,

@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/app/PendingIntent.html sessionActivity

)`

Called when the `https://developer.android.com/reference/android/app/PendingIntent.html` to launch the session activity `https://developer.android.com/reference/androidx/media3/session/MediaSession#setSessionActivity(android.app.PendingIntent)` on the session side.
`default https://guava.dev/releases/snapshot-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html<https://developer.android.com/reference/androidx/media3/session/SessionResult>` `https://developer.android.com/reference/androidx/media3/session/MediaController.Listener#onSetCustomLayout(androidx.media3.session.MediaController,java.util.List<androidx.media3.session.CommandButton>)(

https://developer.android.com/reference/androidx/media3/session/MediaController controller,

https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/session/CommandButton> layout

)`

Called when the session sets the custom layout through `https://developer.android.com/reference/androidx/media3/session/MediaSession#setCustomLayout(androidx.media3.session.MediaSession.ControllerInfo,java.util.List<androidx.media3.session.CommandButton>)`.

## Public methods

### onChildrenChanged

```
default void onChildrenChanged(
    MediaBrowser browser,
    String parentId,
    @IntRange(from = 0) int itemCount,
    @Nullable MediaLibraryService.LibraryParams params
)
```

Called when there's a change in the parent's children after you've subscribed to the parent with `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#subscribe(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`.

This method is called when the app calls `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession#notifyChildrenChanged(androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,int,androidx.media3.session.MediaLibraryService.LibraryParams)` for the parent, or it is called by the library immediately after calling `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#subscribe(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/session/MediaBrowser browser` | The browser for this event. |
| `https://developer.android.com/reference/java/lang/String.html parentId` | The non-empty parent id that you've specified with `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#subscribe(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |
| `@https://developer.android.com/reference/androidx/annotation/IntRange(from = 0) int itemCount` | The number of children, or `https://developer.android.com/reference/java/lang/Integer.html#MAX_VALUE` if the number of items is unknown. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams params` | The optional parameters from the library service. Can be differ from the ` params` that you've specified with `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#subscribe(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |

### onSearchResultChanged

```
default void onSearchResultChanged(
    MediaBrowser browser,
    String query,
    @IntRange(from = 0) int itemCount,
    @Nullable MediaLibraryService.LibraryParams params
)
```

Called when there's change in the search result requested by the previous `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#search(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/session/MediaBrowser browser` | The browser for this event. |
| `https://developer.android.com/reference/java/lang/String.html query` | The non-empty search query that you've specified with `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#search(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |
| `@https://developer.android.com/reference/androidx/annotation/IntRange(from = 0) int itemCount` | The number of items for the search result. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams params` | The optional parameters from the library service. Can be differ from the ` params` that you've specified with `https://developer.android.com/reference/androidx/media3/session/MediaBrowser#search(java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |