# MediaLibraryService.MediaLibrarySession.Builder

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.Builder)

*** ** * ** ***


```
class MediaLibraryService.MediaLibrarySession.Builder
```

<br />

*** ** * ** ***

A builder for `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`.

Any incoming requests from the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaBrowser` will be handled on the application thread of the underlying `https://developer.android.com/reference/kotlin/androidx/media3/common/Player`.

## Summary

| ### Public constructors |
|---|
| `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#Builder(android.content.Context,androidx.media3.common.Player,androidx.media3.session.MediaLibraryService.MediaLibrarySession.Callback)( context: https://developer.android.com/reference/android/content/Context.html!, player: https://developer.android.com/reference/kotlin/androidx/media3/common/Player!, callback: https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback! )` Creates a builder for `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#Builder(androidx.media3.session.MediaLibraryService,androidx.media3.common.Player,androidx.media3.session.MediaLibraryService.MediaLibrarySession.Callback)( service: https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService!, player: https://developer.android.com/reference/kotlin/androidx/media3/common/Player!, callback: https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback! )` Creates a builder for `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. |

| ### Public functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession!` | `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#build()()` Builds a `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setBitmapLoader(androidx.media3.common.util.BitmapLoader)(bitmapLoader: https://developer.android.com/reference/kotlin/androidx/media3/common/util/BitmapLoader!)` Sets a `https://developer.android.com/reference/kotlin/androidx/media3/common/util/BitmapLoader` for the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession` to decode bitmaps from compressed binary data or load bitmaps from `https://developer.android.com/reference/android/net/Uri.html`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setCommandButtonsForMediaItems(java.util.List<androidx.media3.session.CommandButton>)( commandButtons: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton!>! )` Sets `https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton` that can be added as `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaMetadata.Builder#setSupportedCommands(java.util.List<java.lang.String>)`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi @https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setCustomLayout(java.util.List<androidx.media3.session.CommandButton>)(customLayout: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton!>!)` Sets the custom layout of the session. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setExtras(android.os.Bundle)(tokenExtras: https://developer.android.com/reference/android/os/Bundle.html!)` Sets an extras `https://developer.android.com/reference/android/os/Bundle.html` for the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession#getToken()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setId(java.lang.String)(id: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!)` Sets an ID of the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi @https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setLibraryErrorReplicationMode(int)(libraryErrorReplicationMode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` Sets whether library result errors should be replicated to the platform media session's `https://developer.android.com/reference/android/media/session/PlaybackState.html` as a fatal error, a non-fatal error or not replicated at all. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html @https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setMediaButtonPreferences(java.util.List<androidx.media3.session.CommandButton>)( mediaButtonPreferences: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton!>! )` Sets the media button preferences. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi @https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html @https://developer.android.com/reference/kotlin/androidx/annotation/RequiresPermission(value = "android.permission.OVERRIDE_MEDIA_SESSION_OWNER") https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setPackageNameOverride(java.lang.String)(packageNameOverride: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!)` Overrides the package name of the session created. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setPeriodicPositionUpdateEnabled(boolean)(isEnabled: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` Sets whether periodic position updates should be sent to controllers while playing. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setSessionActivity(android.app.PendingIntent)(pendingIntent: https://developer.android.com/reference/android/app/PendingIntent.html!)` Sets a `https://developer.android.com/reference/android/app/PendingIntent.html` to launch an `https://developer.android.com/reference/android/app/Activity.html` for the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setSessionExtras(android.os.Bundle)(sessionExtras: https://developer.android.com/reference/android/os/Bundle.html!)` Sets the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession#getSessionExtras()`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setShowPlayButtonIfPlaybackIsSuppressed(boolean)( showPlayButtonIfPlaybackIsSuppressed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Sets whether a play button is shown if playback is `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#getPlaybackSuppressionReason()`. |

| ### Protected functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/EnsuresNonNull.html(value = "bitmapLoader") https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#ensureBitmapLoaderIsSizeLimited()()` Updates bitmap loader to ensure its using the maximum media session size limit. |

## Public constructors

### Builder

```
@UnstableApi
Builder(
    context: Context!,
    player: Player!,
    callback: MediaLibraryService.MediaLibrarySession.Callback!
)
```

Creates a builder for `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html!` | The `https://developer.android.com/reference/android/content/Context.html`. |
| `player: https://developer.android.com/reference/kotlin/androidx/media3/common/Player!` | The underlying player to perform playback and handle transport controls. |
| `callback: https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback!` | The callback to handle requests from `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaBrowser`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#canAdvertiseSession()` returns false. |

### Builder

```
Builder(
    service: MediaLibraryService!,
    player: Player!,
    callback: MediaLibraryService.MediaLibrarySession.Callback!
)
```

Creates a builder for `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`.

| Parameters |
|---|---|
| `service: https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService!` | The `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService` that instantiates the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. |
| `player: https://developer.android.com/reference/kotlin/androidx/media3/common/Player!` | The underlying player to perform playback and handle transport controls. |
| `callback: https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback!` | The callback to handle requests from `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaBrowser`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException.html` | if `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#canAdvertiseSession()` returns false. |

## Public functions

### build

```
fun build(): MediaLibraryService.MediaLibrarySession!
```

Builds a `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`.

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession!` | A new session. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | if a `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession` with the same `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setId(java.lang.String)` already exists in the package. |

### setBitmapLoader

```
@UnstableApi
fun setBitmapLoader(bitmapLoader: BitmapLoader!): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets a `https://developer.android.com/reference/kotlin/androidx/media3/common/util/BitmapLoader` for the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession` to decode bitmaps from compressed binary data or load bitmaps from `https://developer.android.com/reference/android/net/Uri.html`.

The provided instance will likely be called repeatedly with the same request, so it would be best if any provided instance does some caching. Simple caching can be added to any `https://developer.android.com/reference/kotlin/androidx/media3/common/util/BitmapLoader` implementation by wrapping it in `https://developer.android.com/reference/kotlin/androidx/media3/session/CacheBitmapLoader` before passing it to this method.

If no instance is set, a `https://developer.android.com/reference/kotlin/androidx/media3/session/CacheBitmapLoader` with a `https://developer.android.com/reference/kotlin/androidx/media3/datasource/DataSourceBitmapLoader` inside will be used.

| Parameters |
|---|---|
| `bitmapLoader: https://developer.android.com/reference/kotlin/androidx/media3/common/util/BitmapLoader!` | The bitmap loader `https://developer.android.com/reference/kotlin/androidx/media3/common/util/BitmapLoader`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | The builder to allow chaining. |

### setCommandButtonsForMediaItems

```
@UnstableApi
fun setCommandButtonsForMediaItems(
    commandButtons: (Mutable)List<CommandButton!>!
): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets `https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton` that can be added as `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaMetadata.Builder#setSupportedCommands(java.util.List<java.lang.String>)`.

| Parameters |
|---|---|
| `commandButtons: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton!>!` | The command buttons. |

### setCustomLayout

```
@UnstableApi
@CanIgnoreReturnValue
fun setCustomLayout(customLayout: (Mutable)List<CommandButton!>!): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets the custom layout of the session.

This method will be deprecated, prefer to use `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder#setMediaButtonPreferences(java.util.List<androidx.media3.session.CommandButton>)`. Note that the media button preferences use `https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton#slots()` to define the allowed button placement.

The buttons are converted to platform actions in the platform media session playback state for platform or legacy `android.support.v4.media.session.MediaControllerCompat` controllers (see `
PlaybackStateCompat.Builder#addCustomAction(PlaybackStateCompat.CustomAction)`). When converting, the `https://developer.android.com/reference/kotlin/androidx/media3/session/SessionCommand#customExtras()` is used for the extras of the platform custom action.

Controllers that connect have the custom layout of the session available with the initial connection result by default. A custom layout specific to a controller can be set when the controller `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession.Callback#onConnectAsync(androidx.media3.session.MediaSession,androidx.media3.session.MediaSession.ControllerInfo)` by using an `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession.ConnectionResult.AcceptedResultBuilder`.

On the controller side, `https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton#isEnabled()` is overridden according to the available commands of the controller.

Use `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession#setCustomLayout(androidx.media3.session.MediaSession.ControllerInfo,java.util.List<androidx.media3.session.CommandButton>)` to update the custom layout during the lifetime of the session.

| Parameters |
|---|---|
| `customLayout: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton!>!` | The ordered list of `https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | The builder to allow chaining. |

### setExtras

```
fun setExtras(tokenExtras: Bundle!): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets an extras `https://developer.android.com/reference/android/os/Bundle.html` for the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession#getToken()`. If not set, `https://developer.android.com/reference/android/os/Bundle.html#EMPTY` is used.

A controller has access to these extras through the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaController#getConnectedToken()`.

| Parameters |
|---|---|
| `tokenExtras: https://developer.android.com/reference/android/os/Bundle.html!` | The extras `https://developer.android.com/reference/android/os/Bundle.html`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | The builder to allow chaining. |

### setId

```
fun setId(id: String!): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets an ID of the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. If not set, an empty string will be used.

Use this if and only if your app supports multiple playback at the same time and also wants to provide external apps to have finer-grained controls.

| Parameters |
|---|---|
| `id: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` | The ID. Must be unique among all `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession` per package. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | The builder to allow chaining. |

### setLibraryErrorReplicationMode

```
@UnstableApi
@CanIgnoreReturnValue
fun setLibraryErrorReplicationMode(libraryErrorReplicationMode: Int): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets whether library result errors should be replicated to the platform media session's `https://developer.android.com/reference/android/media/session/PlaybackState.html` as a fatal error, a non-fatal error or not replicated at all. Replication is only executed for calling legacy browsers (`https://developer.android.com/reference/kotlin/android/support/v4/media/MediaBrowserCompat` and `https://developer.android.com/reference/android/media/browse/MediaBrowser.html`) to which no error codes can be transmitted as a result of the service call.

The default is `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession#LIBRARY_ERROR_REPLICATION_MODE_NON_FATAL()`.

`https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Callback#onGetLibraryRoot(androidx.media3.session.MediaLibraryService.MediaLibrarySession,androidx.media3.session.MediaSession.ControllerInfo,androidx.media3.session.MediaLibraryService.LibraryParams)` is exempted from replication, because this method is part of the connection process of a legacy browser.

The following error codes are replicated:

- `https://developer.android.com/reference/kotlin/androidx/media3/session/SessionError#ERROR_SESSION_AUTHENTICATION_EXPIRED()`
- `https://developer.android.com/reference/kotlin/androidx/media3/session/SessionError#ERROR_SESSION_PREMIUM_ACCOUNT_REQUIRED()`

See `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession#clearReplicatedLibraryError()` also.

| Parameters |
|---|---|
| `libraryErrorReplicationMode: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | The mode to use. |

### setMediaButtonPreferences

```
@CanIgnoreReturnValue
@UnstableApi
fun setMediaButtonPreferences(
    mediaButtonPreferences: (Mutable)List<CommandButton!>!
): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets the media button preferences.

The button is converted to custom actions in the platform media session playback state for platform or legacy `android.support.v4.media.session.MediaControllerCompat` controllers (see `
PlaybackStateCompat.Builder#addCustomAction(PlaybackStateCompat.CustomAction)`). When converting, the `https://developer.android.com/reference/kotlin/androidx/media3/session/SessionCommand#customExtras()` is used for the extras of the platform custom action.

Controllers that connect have the media button preferences of the session available with the initial connection result by default. Media button preferences specific to a controller can be set when the controller `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession.Callback#onConnectAsync(androidx.media3.session.MediaSession,androidx.media3.session.MediaSession.ControllerInfo)` by using an `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession.ConnectionResult.AcceptedResultBuilder`.

Use `MediaSession.setMediaButtonPreferences(..)` to update the media button preferences during the lifetime of the session.

On the controller side, the `https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton#isEnabled()` flag is set to `false` if the available commands of a controller do not allow to use a button.

| Parameters |
|---|---|
| `mediaButtonPreferences: (https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton!>!` | The ordered list of `https://developer.android.com/reference/kotlin/androidx/media3/session/CommandButton`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | The builder to allow chaining. |

### setPackageNameOverride

```
@UnstableApi
@CanIgnoreReturnValue
@RequiresPermission(value = "android.permission.OVERRIDE_MEDIA_SESSION_OWNER")
fun setPackageNameOverride(packageNameOverride: String!): MediaLibraryService.MediaLibrarySession.Builder!
```

Overrides the package name of the session created.

This method must not be used if the provided `packageNameOverride` is same as the package name of the application creating the session.

Interoperability: The value set by this method is ignored on API levels below 37 for legacy sessions and controllers.

| Parameters |
|---|---|
| `packageNameOverride: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html!` | The package name override of the session when created. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | This builder. |

### setPeriodicPositionUpdateEnabled

```
@UnstableApi
fun setPeriodicPositionUpdateEnabled(isEnabled: Boolean): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets whether periodic position updates should be sent to controllers while playing. If false, no periodic position updates are sent to controllers.

The default is `true`.

| Parameters |
|---|---|
| `isEnabled: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether periodic position update is enabled. |

### setSessionActivity

```
fun setSessionActivity(pendingIntent: PendingIntent!): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets a `https://developer.android.com/reference/android/app/PendingIntent.html` to launch an `https://developer.android.com/reference/android/app/Activity.html` for the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession`. This can be used as a quick link to an ongoing media screen.

| Parameters |
|---|---|
| `pendingIntent: https://developer.android.com/reference/android/app/PendingIntent.html!` | The pending intent. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | The builder to allow chaining. |

### setSessionExtras

```
@UnstableApi
fun setSessionExtras(sessionExtras: Bundle!): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets the `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaSession#getSessionExtras()`. If not set, `https://developer.android.com/reference/android/os/Bundle.html#EMPTY` is used.

A controller has access to session extras through `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaController#getSessionExtras()`.

| Parameters |
|---|---|
| `sessionExtras: https://developer.android.com/reference/android/os/Bundle.html!` | The session extras `https://developer.android.com/reference/android/os/Bundle.html`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/session/MediaLibraryService.MediaLibrarySession.Builder!` | The builder to allow chaining. |

### setShowPlayButtonIfPlaybackIsSuppressed

```
@UnstableApi
fun setShowPlayButtonIfPlaybackIsSuppressed(
    showPlayButtonIfPlaybackIsSuppressed: Boolean
): MediaLibraryService.MediaLibrarySession.Builder!
```

Sets whether a play button is shown if playback is `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#getPlaybackSuppressionReason()`.

The default is `true`.

| Parameters |
|---|---|
| `showPlayButtonIfPlaybackIsSuppressed: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether to show a play button if playback is `https://developer.android.com/reference/kotlin/androidx/media3/common/Player#getPlaybackSuppressionReason()`. |

## Protected functions

### ensureBitmapLoaderIsSizeLimited

```
@EnsuresNonNull(value = "bitmapLoader")
protected fun ensureBitmapLoaderIsSizeLimited(): Unit
```

Updates bitmap loader to ensure its using the maximum media session size limit.