# PlaybackSessionManager

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

*** ** * ** ***


```
@UnstableApi
public interface PlaybackSessionManager
```

<br />

Known direct subclasses [DefaultPlaybackSessionManager](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager)

|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager` | Default `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager` which instantiates a new session for each window in the timeline and also for each ad within the windows. |

*** ** * ** ***

Manager for active playback sessions.

The manager keeps track of the association between window index and/or media period id to session identifier.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener` A listener for session updates. |

| ### Public methods |
|---|---|
| `abstract boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#belongsToSession(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, https://developer.android.com/reference/java/lang/String.html sessionId )` Returns whether an event time belong to a session. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#finishAllSessions(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)` Finishes all existing sessions and calls their respective `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener#onSessionFinished(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,boolean)` callback. |
| `abstract @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#getActiveSessionId()()` Returns the session identifier of the session that is currently actively playing, or ` null` if there no such session. |
| `abstract https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#getSessionForMediaPeriodId(androidx.media3.common.Timeline,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)( https://developer.android.com/reference/androidx/media3/common/Timeline timeline, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId )` Returns the session identifier for the given media period id. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#setListener(androidx.media3.exoplayer.analytics.PlaybackSessionManager.Listener)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener listener)` Sets the listener to be notified of session updates. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessions(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime)` Updates or creates sessions based on a player `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime`. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessionsWithDiscontinuity(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime, @https://developer.android.com/reference/androidx/media3/common/Player.DiscontinuityReason int reason )` Updates or creates sessions based on a position discontinuity at `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime`. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessionsWithTimelineChange(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime )` Updates or creates sessions based on a `https://developer.android.com/reference/androidx/media3/common/Timeline` change at `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime`. |

## Public methods

### belongsToSession

```
abstract boolean belongsToSession(
    AnalyticsListener.EventTime eventTime,
    String sessionId
)
```

Returns whether an event time belong to a session.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime`. |
| `https://developer.android.com/reference/java/lang/String.html sessionId` | A session identifier. |

| Returns |
|---|---|
| `boolean` | Whether the event belongs to the specified session. |

### finishAllSessions

```
abstract void finishAllSessions(AnalyticsListener.EventTime eventTime)
```

Finishes all existing sessions and calls their respective `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener#onSessionFinished(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,boolean)` callback.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The event time at which sessions are finished. |

### getActiveSessionId

```
abstract @Nullable String getActiveSessionId()
```

Returns the session identifier of the session that is currently actively playing, or `
null` if there no such session.

### getSessionForMediaPeriodId

```
abstract String getSessionForMediaPeriodId(
    Timeline timeline,
    MediaSource.MediaPeriodId mediaPeriodId
)
```

Returns the session identifier for the given media period id.

Note that this will reserve a new session identifier if it doesn't exist yet, but will not call any `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener` callbacks.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Timeline timeline` | The timeline, `mediaPeriodId` is part of. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | A `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId`. |

### setListener

```
abstract void setListener(PlaybackSessionManager.Listener listener)
```

Sets the listener to be notified of session updates. Must be called before the session manager is used.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener listener` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener` to be notified of session updates. |

### updateSessions

```
abstract void updateSessions(AnalyticsListener.EventTime eventTime)
```

Updates or creates sessions based on a player `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime`.

Call `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessionsWithTimelineChange(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)` or `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessionsWithDiscontinuity(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int)` if the event is a `https://developer.android.com/reference/androidx/media3/common/Timeline` change or a position discontinuity respectively.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime`. |

### updateSessionsWithDiscontinuity

```
abstract void updateSessionsWithDiscontinuity(
    AnalyticsListener.EventTime eventTime,
    @Player.DiscontinuityReason int reason
)
```

Updates or creates sessions based on a position discontinuity at `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime`.

Should be called instead of `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessions(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)` if a position discontinuity occurred.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime` of the position discontinuity. |
| `@https://developer.android.com/reference/androidx/media3/common/Player.DiscontinuityReason int reason` | The `https://developer.android.com/reference/androidx/media3/common/Player.DiscontinuityReason`. |

### updateSessionsWithTimelineChange

```
abstract void updateSessionsWithTimelineChange(
    AnalyticsListener.EventTime eventTime
)
```

Updates or creates sessions based on a `https://developer.android.com/reference/androidx/media3/common/Timeline` change at `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime`.

Should be called instead of `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessions(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime)` if a `https://developer.android.com/reference/androidx/media3/common/Timeline` change occurred.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime eventTime` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime` with the timeline change. |