# MediaLibraryService.MediaLibrarySession

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/MediaLibraryService.java+class:androidx.media3.session.MediaLibraryService.MediaLibrarySession)

*** ** * ** ***


```
public final class MediaLibraryService.MediaLibrarySession extends MediaSession
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.session.MediaSession](https://developer.android.com/reference/androidx/media3/session/MediaSession) ||
|   | ↳ | [androidx.media3.session.MediaLibraryService.MediaLibrarySession](https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession) |

*** ** * ** ***

An extended `https://developer.android.com/reference/androidx/media3/session/MediaSession` for the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService`. Build an instance with `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder` and return it from `https://developer.android.com/reference/androidx/media3/session/MediaSessionService#onGetSession(androidx.media3.session.MediaSession.ControllerInfo)`.

## Backward compatibility with legacy media browser APIs

A library session supports connection from both `https://developer.android.com/reference/androidx/media3/session/MediaBrowser` and `
android.support.v4.media.MediaBrowserCompat`, but the `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo` may not be precise. Here are the details.

| SDK version | `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo#getPackageName()`for legacy browser | `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo#getUid()`for legacy browser |
|---|---|---|
| `SDK_INT < 28` for `https://developer.android.com/reference/androidx/media3/session/MediaSession.Callback#onConnectAsync(androidx.media3.session.MediaSession,androidx.media3.session.MediaSession.ControllerInfo)` and `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onGetLibraryRoot(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,androidx.media3.session.MediaLibraryService.LibraryParams)` | Actual package name via `https://developer.android.com/reference/android/content/Context.html#getPackageName()` | Actual UID |
| `SDK_INT < 28` for other `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback` | `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo#LEGACY_CONTROLLER_PACKAGE_NAME()` | Negative value |
| `28 <= SDK_INT` | Actual package name via `https://developer.android.com/reference/android/content/Context.html#getPackageName()` | Actual UID |
[Summary when controller info isn't precise]

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder` A builder for `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. |
| `public interface https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback extends https://developer.android.com/reference/androidx/media3/session/MediaSession.Callback` An extended `https://developer.android.com/reference/androidx/media3/session/MediaSession.Callback` for the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. |

| ### Constants |
|---|---|
| `static final int` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession#LIBRARY_ERROR_REPLICATION_MODE_FATAL() = 1` `https://developer.android.com/reference/androidx/media3/session/SessionError` returned by the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback` as part of a `https://developer.android.com/reference/androidx/media3/session/LibraryResult` are replicated to the platform session as a fatal error. |
| `static final int` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession#LIBRARY_ERROR_REPLICATION_MODE_NONE() = 0` No library service errors are replicated. |
| `static final int` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession#LIBRARY_ERROR_REPLICATION_MODE_NON_FATAL() = 2` `https://developer.android.com/reference/androidx/media3/session/SessionError` returned by the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback` as part of a `https://developer.android.com/reference/androidx/media3/session/LibraryResult` are replicated to the platform session as a non-fatal error. |

| ### Public methods |
|---|---|
| `void` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession#clearReplicatedLibraryError()()` Clears the replicated library error in the platform session that was set when a `https://developer.android.com/reference/androidx/media3/session/LibraryResult` with an error result code was returned by the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback` that is replicated and if `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setLibraryErrorReplicationMode(int)`. |
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo>` | `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession#getSubscribedControllers(java.lang.String)(https://developer.android.com/reference/java/lang/String.html mediaId)` Returns the controllers that are currently subscribed to the given `mediaId`. |
| `void` | `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession#notifyChildrenChanged(java.lang.String,int,androidx.media3.session.MediaLibraryService.LibraryParams)( 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 )` Notifies all browsers that are `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSubscribe(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)` to the parent of the change to its children regardless of the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams` given by `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSubscribe(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |
| `void` | `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)( https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo 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 )` Notifies a browser that is `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSubscribe(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)` to a browsable media item that the children of the item have changed. |
| `void` | `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession#notifySearchResultChanged(androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,int,androidx.media3.session.MediaLibraryService.LibraryParams)( https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo 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 )` Notifies a browser of a change to the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSearch(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)` result. |

### Inherited methods

From [androidx.media3.session.MediaSession](https://developer.android.com/reference/androidx/media3/session/MediaSession) `final void` `https://developer.android.com/reference/androidx/media3/session/MediaSession#broadcastCustomCommand(androidx.media3.session.SessionCommand,android.os.Bundle)(https://developer.android.com/reference/androidx/media3/session/SessionCommand command, https://developer.android.com/reference/android/os/Bundle.html args)`

Broadcasts a custom command to all connected controllers.
`static int` `https://developer.android.com/reference/androidx/media3/session/MediaSession#getBitmapDimensionLimit(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)`

Returns the bitmap dimension limit in pixels.
`final https://developer.android.com/reference/androidx/media3/common/util/BitmapLoader` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#getBitmapLoader()()`

Returns the `https://developer.android.com/reference/androidx/media3/common/util/BitmapLoader`.
`final https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo>` `https://developer.android.com/reference/androidx/media3/session/MediaSession#getConnectedControllers()()`

Returns the list of connected controllers.
`final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo` `https://developer.android.com/reference/androidx/media3/session/MediaSession#getControllerForCurrentRequest()()`

Returns the `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo` for the controller that sent the current request for a `https://developer.android.com/reference/androidx/media3/common/Player` method.
`https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/androidx/media3/session/CommandButton>` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#getCustomLayout()()`

Returns the custom layout of the session.
`final https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/androidx/media3/session/MediaSession#getId()()`

Returns the session ID.
`https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/androidx/media3/session/CommandButton>` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#getMediaButtonPreferences()()`

Returns the media button preferences of the session.
`@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#getMediaNotificationControllerInfo()()`

Returns the `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo` of the media notification controller.
`final https://developer.android.com/reference/android/media/session/MediaSession.Token.html` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#getPlatformToken()()`

Returns the platform `https://developer.android.com/reference/android/media/session/MediaSession.Token.html` of the `https://developer.android.com/reference/android/media/session/MediaSession.html` created internally by this session.
`final https://developer.android.com/reference/androidx/media3/common/Player` `https://developer.android.com/reference/androidx/media3/session/MediaSession#getPlayer()()`

Returns the underlying `https://developer.android.com/reference/androidx/media3/common/Player`.
`final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/app/PendingIntent.html` `https://developer.android.com/reference/androidx/media3/session/MediaSession#getSessionActivity()()`

Returns the `https://developer.android.com/reference/android/app/PendingIntent.html` to launch `https://developer.android.com/reference/androidx/media3/session/MediaSession.Builder#setSessionActivity(android.app.PendingIntent)` or null if not set.
`https://developer.android.com/reference/android/os/Bundle.html` `https://developer.android.com/reference/androidx/media3/session/MediaSession#getSessionExtras()()`

Returns the session extras.
`final boolean` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#getShowPlayButtonIfPlaybackIsSuppressed()()`

Returns whether a play button is shown if playback is `https://developer.android.com/reference/androidx/media3/common/Player#getPlaybackSuppressionReason()`.
`final https://developer.android.com/reference/androidx/media3/session/SessionToken` `https://developer.android.com/reference/androidx/media3/session/MediaSession#getToken()()`

Returns the `https://developer.android.com/reference/androidx/media3/session/SessionToken` for creating `https://developer.android.com/reference/androidx/media3/session/MediaController` instances.
`final boolean` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#isAutoCompanionController(androidx.media3.session.MediaSession.ControllerInfo)(https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controllerInfo)`

Returns whether the given `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo` belongs to an Android Auto companion app controller.
`final boolean` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#isAutomotiveController(androidx.media3.session.MediaSession.ControllerInfo)(https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controllerInfo)`

Returns whether the given `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo` belongs to an Automotive OS controller.
`boolean` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#isMediaNotificationController(androidx.media3.session.MediaSession.ControllerInfo)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controllerInfo
)`

Returns whether the given media controller info belongs to the media notification controller.
`final void` `https://developer.android.com/reference/androidx/media3/session/MediaSession#release()()`

Releases the session and disconnects all connected controllers.
`final 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/MediaSession#sendCustomCommand(androidx.media3.session.MediaSession.ControllerInfo,androidx.media3.session.SessionCommand,android.os.Bundle)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controller,
https://developer.android.com/reference/androidx/media3/session/SessionCommand command,
https://developer.android.com/reference/android/os/Bundle.html args
)`

Sends a custom command to a specific controller.
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#sendError(androidx.media3.session.SessionError)(https://developer.android.com/reference/androidx/media3/session/SessionError sessionError)`

Sends a non-fatal error to all connected controllers.
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#sendError(androidx.media3.session.MediaSession.ControllerInfo,androidx.media3.session.SessionError)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controllerInfo,
https://developer.android.com/reference/androidx/media3/session/SessionError sessionError
)`

Sends a non-fatal error to the given controller.
`final void` `https://developer.android.com/reference/androidx/media3/session/MediaSession#setAvailableCommands(androidx.media3.session.MediaSession.ControllerInfo,androidx.media3.session.SessionCommands,androidx.media3.common.Player.Commands)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controller,
https://developer.android.com/reference/androidx/media3/session/SessionCommands sessionCommands,
https://developer.android.com/reference/androidx/media3/common/Player.Commands playerCommands
)`

Sets the new available commands for the controller.
`final void` `https://developer.android.com/reference/androidx/media3/session/MediaSession#setCustomLayout(java.util.List<androidx.media3.session.CommandButton>)(https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/session/CommandButton> layout)`

Sets the custom layout for all controllers.
`final 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://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html
https://developer.android.com/reference/androidx/media3/session/MediaSession#setCustomLayout(androidx.media3.session.MediaSession.ControllerInfo,java.util.List<androidx.media3.session.CommandButton>)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controller,
https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/session/CommandButton> layout
)`

Sets the custom layout for the given controller.
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#setMediaButtonPreferences(java.util.List<androidx.media3.session.CommandButton>)(https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/session/CommandButton> mediaButtonPreferences)`

Sets the media button preferences for all controllers.
`final 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/common/util/UnstableApi
@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html
https://developer.android.com/reference/androidx/media3/session/MediaSession#setMediaButtonPreferences(androidx.media3.session.MediaSession.ControllerInfo,java.util.List<androidx.media3.session.CommandButton>)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controller,
https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/session/CommandButton> mediaButtonPreferences
)`

Sets the media button preferences for the given controller.
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#setPlaybackException(androidx.media3.common.PlaybackException)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/PlaybackException playbackException)`

Sets the playback exception for all connected controllers.
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#setPlaybackException(androidx.media3.session.MediaSession.ControllerInfo,androidx.media3.common.PlaybackException)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controllerInfo,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/PlaybackException playbackException
)`

Sets the playback exception for the given controller.
`final void` `https://developer.android.com/reference/androidx/media3/session/MediaSession#setPlayer(androidx.media3.common.Player)(https://developer.android.com/reference/androidx/media3/common/Player player)`

Sets the underlying `https://developer.android.com/reference/androidx/media3/common/Player` for this session to dispatch incoming events to.
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#setSessionActivity(android.app.PendingIntent)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/app/PendingIntent.html activityPendingIntent)`

Updates the session activity that was set when `https://developer.android.com/reference/androidx/media3/session/MediaSession.Builder#setSessionActivity(android.app.PendingIntent)`.
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/session/MediaSession#setSessionActivity(androidx.media3.session.MediaSession.ControllerInfo,android.app.PendingIntent)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controller,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/app/PendingIntent.html activityPendingIntent
)`

Sends the session activity to the connected controller.
`final void` `https://developer.android.com/reference/androidx/media3/session/MediaSession#setSessionExtras(android.os.Bundle)(https://developer.android.com/reference/android/os/Bundle.html sessionExtras)`

Sets the `https://developer.android.com/reference/androidx/media3/session/MediaSession#getSessionExtras()` and sends them to connected controllers.
`final void` `https://developer.android.com/reference/androidx/media3/session/MediaSession#setSessionExtras(androidx.media3.session.MediaSession.ControllerInfo,android.os.Bundle)(
https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo controller,
https://developer.android.com/reference/android/os/Bundle.html sessionExtras
)`

Sends the session extras to the connected controller.

## Constants

### LIBRARY_ERROR_REPLICATION_MODE_FATAL

```
@UnstableApi
public static final int LIBRARY_ERROR_REPLICATION_MODE_FATAL = 1
```

`https://developer.android.com/reference/androidx/media3/session/SessionError` returned by the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback` as part of a `https://developer.android.com/reference/androidx/media3/session/LibraryResult` are replicated to the platform session as a fatal error.

### LIBRARY_ERROR_REPLICATION_MODE_NONE

```
@UnstableApi
public static final int LIBRARY_ERROR_REPLICATION_MODE_NONE = 0
```

No library service errors are replicated.

### LIBRARY_ERROR_REPLICATION_MODE_NON_FATAL

```
@UnstableApi
public static final int LIBRARY_ERROR_REPLICATION_MODE_NON_FATAL = 2
```

`https://developer.android.com/reference/androidx/media3/session/SessionError` returned by the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback` as part of a `https://developer.android.com/reference/androidx/media3/session/LibraryResult` are replicated to the platform session as a non-fatal error.

## Public methods

### clearReplicatedLibraryError

```
@UnstableApi
public void clearReplicatedLibraryError()
```

Clears the replicated library error in the platform session that was set when a `https://developer.android.com/reference/androidx/media3/session/LibraryResult` with an error result code was returned by the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback` that is replicated and if `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setLibraryErrorReplicationMode(int)`.

Note: If a `https://developer.android.com/reference/androidx/media3/session/LibraryResult#RESULT_SUCCESS()` was returned by a method of `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback` that is considered for replication, the error is cleared automatically by the library.

Calling this method updates the platform session playback state in case there was a replicated error set. If no error was set, calling this method is a no-op.

### getSubscribedControllers

```
@UnstableApi
public ImmutableList<MediaSession.ControllerInfo> getSubscribedControllers(String mediaId)
```

Returns the controllers that are currently subscribed to the given `mediaId`.

Use the returned `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo` to call `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)` in case the children of the media item with the given media ID have changed and the connected controller should fetch them again.

Note that calling `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 a controller that didn't subscribe to the media ID results in a no-op.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html mediaId` | The ID of the media item for which to get subscribed controllers. |

| Returns |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo>` | A list with the subscribed controllers, may be empty. |

### notifyChildrenChanged

```
public void notifyChildrenChanged(
    String parentId,
    @IntRange(from = 0) int itemCount,
    @Nullable MediaLibraryService.LibraryParams params
)
```

Notifies all browsers that are `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSubscribe(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)` to the parent of the change to its children regardless of the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams` given by `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSubscribe(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html parentId` | The non-empty id of the parent with changes to its children. |
| `@https://developer.android.com/reference/androidx/annotation/IntRange(from = 0) int itemCount` | The number of children. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams params` | The optional parameters. |

### notifyChildrenChanged

```
public void notifyChildrenChanged(
    MediaSession.ControllerInfo browser,
    String parentId,
    @IntRange(from = 0) int itemCount,
    @Nullable MediaLibraryService.LibraryParams params
)
```

Notifies a browser that is `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSubscribe(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)` to a browsable media item that the children of the item have changed. This method is also called immediately after subscribing was successful.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo browser` | The browser to notify. |
| `https://developer.android.com/reference/java/lang/String.html parentId` | The non-empty id of the parent with changes to its children. |
| `@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 unknown. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams params` | The parameters given by `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSubscribe(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |

### notifySearchResultChanged

```
public void notifySearchResultChanged(
    MediaSession.ControllerInfo browser,
    String query,
    @IntRange(from = 0) int itemCount,
    @Nullable MediaLibraryService.LibraryParams params
)
```

Notifies a browser of a change to the `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSearch(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)` result.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/session/MediaSession.ControllerInfo browser` | The browser to notify. |
| `https://developer.android.com/reference/java/lang/String.html query` | The non-empty search query given by `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSearch(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |
| `@https://developer.android.com/reference/androidx/annotation/IntRange(from = 0) int itemCount` | The number of items that have been found in the search. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.LibraryParams params` | The parameters given by `https://developer.android.com/reference/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onSearch(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,java.lang.String,androidx.media3.session.MediaLibraryService.LibraryParams)`. |