Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  
Deprecated in [API level 37](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

# SessionCallback

*** ** * ** ***

```
abstract class SessionCallback
```

|---|---|
| [kotlin.Any](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html) ||
| ↳ | [android.media.MediaSession2.SessionCallback](https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#) |

*** ** * ** ***

> [!CAUTION]
> **This class was deprecated in API level 37.**
>
> Use the Media3 support library's `androidx.media3.session.MediaSession` instead.

This API is not generally intended for third party application developers. Use the [AndroidX](https://developer.android.com/jetpack/androidx.html) [Media3 session Library](https://developer.android.com/reference/androidx/media3/session/package-summary.html) for consistent behavior across all devices.

Callback to be called for all incoming commands from `https://developer.android.com/reference/kotlin/android/media/MediaController2`s.

## Summary

| Public constructors ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#SessionCallback()()` <br /> |

| Public methods ||
|---|---|
| open [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#onCommandResult(android.media.MediaSession2,%20android.media.MediaSession2.ControllerInfo,%20kotlin.Any,%20android.media.Session2Command,%20android.media.Session2Command.Result)(session: https://developer.android.com/reference/kotlin/android/media/MediaSession2, controller: https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo, token: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html, command: https://developer.android.com/reference/kotlin/android/media/Session2Command, result: https://developer.android.com/reference/kotlin/android/media/Session2Command.Result)` Called when the command sent to the controller is finished. |
| open [Session2CommandGroup](https://developer.android.com/reference/kotlin/android/media/Session2CommandGroup)? | `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#onConnect(android.media.MediaSession2,%20android.media.MediaSession2.ControllerInfo)(session: https://developer.android.com/reference/kotlin/android/media/MediaSession2, controller: https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo)` Called when a controller is created for this session. |
| open [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#onDisconnected(android.media.MediaSession2,%20android.media.MediaSession2.ControllerInfo)(session: https://developer.android.com/reference/kotlin/android/media/MediaSession2, controller: https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo)` Called when a controller is disconnected |
| open [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html) | `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#onPostConnect(android.media.MediaSession2,%20android.media.MediaSession2.ControllerInfo)(session: https://developer.android.com/reference/kotlin/android/media/MediaSession2, controller: https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo)` Called immediately after a controller is connected. |
| open [Session2Command.Result](https://developer.android.com/reference/kotlin/android/media/Session2Command.Result)? | `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#onSessionCommand(android.media.MediaSession2,%20android.media.MediaSession2.ControllerInfo,%20android.media.Session2Command,%20android.os.Bundle)(session: https://developer.android.com/reference/kotlin/android/media/MediaSession2, controller: https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo, command: https://developer.android.com/reference/kotlin/android/media/Session2Command, args: https://developer.android.com/reference/kotlin/android/os/Bundle.html#?)` Called when a controller sent a session command. |

## Public constructors

### SessionCallback

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
SessionCallback()
```

## Public methods

### onCommandResult

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun onCommandResult(
    session: MediaSession2, 
    controller: MediaSession2.ControllerInfo, 
    token: Any, 
    command: Session2Command, 
    result: Session2Command.Result
): Unit
```

**Deprecated:** *Deprecated in Java.*

Called when the command sent to the controller is finished.

| Parameters ||
|---|---|
| `session` | [MediaSession2](https://developer.android.com/reference/kotlin/android/media/MediaSession2): the session for this event. This value cannot be `null`. |
| `controller` | [MediaSession2.ControllerInfo](https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo): controller information. This value cannot be `null`. |
| `token` | [Any](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html): the token got from `https://developer.android.com/reference/kotlin/android/media/MediaSession2#sendSessionCommand(android.media.MediaSession2.ControllerInfo,%20android.media.Session2Command,%20android.os.Bundle)` This value cannot be `null`. |
| `command` | [Session2Command](https://developer.android.com/reference/kotlin/android/media/Session2Command): the session command. This value cannot be `null`. |
| `result` | [Session2Command.Result](https://developer.android.com/reference/kotlin/android/media/Session2Command.Result): the result of the session command. This value cannot be `null`. |

### onConnect

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun onConnect(
    session: MediaSession2, 
    controller: MediaSession2.ControllerInfo
): Session2CommandGroup?
```

**Deprecated:** *Deprecated in Java.*

Called when a controller is created for this session. Return allowed commands for controller. By default it returns `null`.

You can reject the connection by returning `null`. In that case, controller receives `https://developer.android.com/reference/kotlin/android/media/MediaController2.ControllerCallback#onDisconnected(android.media.MediaController2)` and cannot be used.

The controller hasn't connected yet in this method, so calls to the controller (e.g. `https://developer.android.com/reference/kotlin/android/media/MediaSession2#sendSessionCommand(android.media.MediaSession2.ControllerInfo,%20android.media.Session2Command,%20android.os.Bundle)`) would be ignored. Override `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#onPostConnect(android.media.MediaSession2,%20android.media.MediaSession2.ControllerInfo)` for the custom initialization for the controller instead.

| Parameters ||
|---|---|
| `session` | [MediaSession2](https://developer.android.com/reference/kotlin/android/media/MediaSession2): the session for this event. This value cannot be `null`. |
| `controller` | [MediaSession2.ControllerInfo](https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo): controller information. This value cannot be `null`. |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/Session2CommandGroup?` | allowed commands. Can be `null` to reject connection. |

### onDisconnected

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun onDisconnected(
    session: MediaSession2, 
    controller: MediaSession2.ControllerInfo
): Unit
```

**Deprecated:** *Deprecated in Java.*

Called when a controller is disconnected

| Parameters ||
|---|---|
| `session` | [MediaSession2](https://developer.android.com/reference/kotlin/android/media/MediaSession2): the session for this event. This value cannot be `null`. |
| `controller` | [MediaSession2.ControllerInfo](https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo): controller information. This value cannot be `null`. |

### onPostConnect

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun onPostConnect(
    session: MediaSession2, 
    controller: MediaSession2.ControllerInfo
): Unit
```

**Deprecated:** *Deprecated in Java.*

Called immediately after a controller is connected. This is a convenient method to add custom initialization between the session and a controller.

Note that calls to the controller (e.g. `https://developer.android.com/reference/kotlin/android/media/MediaSession2#sendSessionCommand(android.media.MediaSession2.ControllerInfo,%20android.media.Session2Command,%20android.os.Bundle)`) work here but don't work in `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#onConnect(android.media.MediaSession2,%20android.media.MediaSession2.ControllerInfo)` because the controller hasn't connected yet in `https://developer.android.com/reference/kotlin/android/media/MediaSession2.SessionCallback#onConnect(android.media.MediaSession2,%20android.media.MediaSession2.ControllerInfo)`.

| Parameters ||
|---|---|
| `session` | [MediaSession2](https://developer.android.com/reference/kotlin/android/media/MediaSession2): the session for this event. This value cannot be `null`. |
| `controller` | [MediaSession2.ControllerInfo](https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo): controller information. This value cannot be `null`. |

### onSessionCommand

Added in [API level 29](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

```
open fun onSessionCommand(
    session: MediaSession2, 
    controller: MediaSession2.ControllerInfo, 
    command: Session2Command, 
    args: Bundle?
): Session2Command.Result?
```

**Deprecated:** *Deprecated in Java.*

Called when a controller sent a session command.

| Parameters ||
|---|---|
| `session` | [MediaSession2](https://developer.android.com/reference/kotlin/android/media/MediaSession2): the session for this event. This value cannot be `null`. |
| `controller` | [MediaSession2.ControllerInfo](https://developer.android.com/reference/kotlin/android/media/MediaSession2.ControllerInfo): controller information. This value cannot be `null`. |
| `command` | [Session2Command](https://developer.android.com/reference/kotlin/android/media/Session2Command): the session command. This value cannot be `null`. |
| `args` | [Bundle](https://developer.android.com/reference/kotlin/android/os/Bundle.html#)?: optional arguments. This value may be `null`. |

| Return ||
|---|---|
| `https://developer.android.com/reference/kotlin/android/media/Session2Command.Result?` | the result for the session command. If `null`, RESULT_INFO_SKIPPED will be sent to the session. |