# PlaybackSessionManager

# 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)

*** ** * ** ***

Kotlin \|[Java](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlaybackSessionManager "View this page in Java")


```
@UnstableApi
interface PlaybackSessionManager
```

<br />

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

|---------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [DefaultPlaybackSessionManager](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager) | Default [PlaybackSessionManager](https://developer.android.com/reference/kotlin/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                                                                                          |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `interface `[PlaybackSessionManager.Listener](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener) A listener for session updates. |

|                                 ### Public functions                                 |
|--------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)  | [belongsToSession](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager#belongsToSession(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String))`(` ` eventTime: `[AnalyticsListener.EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime)`!,` ` sessionId: `[String](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)`!` `)` Returns whether an event time belong to a session.                                                                                                                                                                                                                                                                                   |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)        | [finishAllSessions](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager#finishAllSessions(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime))`(eventTime: `[AnalyticsListener.EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime)`!)` Finishes all existing sessions and calls their respective [onSessionFinished](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener#onSessionFinished(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,java.lang.String,boolean)) callback.                                                                                                                                        |
| [String](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)`?` | [getActiveSessionId](https://developer.android.com/reference/kotlin/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.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| [String](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)`!` | [getSessionForMediaPeriodId](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager#getSessionForMediaPeriodId(androidx.media3.common.Timeline,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))`(` ` timeline: `[Timeline](https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline)`!,` ` mediaPeriodId: `[MediaSource.MediaPeriodId](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId)`!` `)` Returns the session identifier for the given media period id.                                                                                                                                                                                                                                     |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)        | [setListener](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager#setListener(androidx.media3.exoplayer.analytics.PlaybackSessionManager.Listener))`(listener: `[PlaybackSessionManager.Listener](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener)`!)` Sets the listener to be notified of session updates.                                                                                                                                                                                                                                                                                                                                                                                                            |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)        | [updateSessions](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessions(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime))`(eventTime: `[AnalyticsListener.EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime)`!)` Updates or creates sessions based on a player [EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime).                                                                                                                                                                                                                                                                                           |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)        | [updateSessionsWithDiscontinuity](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessionsWithDiscontinuity(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime,int))`(` ` eventTime: `[AnalyticsListener.EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime)`!,` ` @`[Player.DiscontinuityReason](https://developer.android.com/reference/kotlin/androidx/media3/common/Player.DiscontinuityReason)` reason: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) `)` Updates or creates sessions based on a position discontinuity at [EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime). |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)        | [updateSessionsWithTimelineChange](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager#updateSessionsWithTimelineChange(androidx.media3.exoplayer.analytics.AnalyticsListener.EventTime))`(` ` eventTime: `[AnalyticsListener.EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime)`!` `)` Updates or creates sessions based on a [Timeline](https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline) change at [EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime).                                                                                                                                                  |

## Public functions

### belongsToSession

```
fun belongsToSession(
    eventTime: AnalyticsListener.EventTime!,
    sessionId: String!
): Boolean
```

Returns whether an event time belong to a session.  

|                                                                          Parameters                                                                           |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| `eventTime: `[AnalyticsListener.EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime)`!` | The [EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime). |
| `sessionId: `[String](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)`!`                                                             | A session identifier.                                                                                                            |

|                                       Returns                                       |
|-------------------------------------------------------------------------------------|-----------------------------------------------------|
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) | Whether the event belongs to the specified session. |

### finishAllSessions

```
fun finishAllSessions(eventTime: AnalyticsListener.EventTime!): Unit
```

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

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

### getActiveSessionId

```
fun getActiveSessionId(): String?
```

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

### getSessionForMediaPeriodId

```
fun getSessionForMediaPeriodId(
    timeline: Timeline!,
    mediaPeriodId: MediaSource.MediaPeriodId!
): String!
```

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 [Listener](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlaybackSessionManager.Listener) callbacks.  

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

### setListener

```
fun setListener(listener: PlaybackSessionManager.Listener!): Unit
```

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

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

### updateSessions

```
fun updateSessions(eventTime: AnalyticsListener.EventTime!): Unit
```

Updates or creates sessions based on a player [EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime).

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

|                                                                          Parameters                                                                           |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|
| `eventTime: `[AnalyticsListener.EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime)`!` | The [EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime). |

### updateSessionsWithDiscontinuity

```
fun updateSessionsWithDiscontinuity(
    eventTime: AnalyticsListener.EventTime!,
    @Player.DiscontinuityReason reason: Int
): Unit
```

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

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

|                                                                                                       Parameters                                                                                                        |
|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `eventTime: `[AnalyticsListener.EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime)`!`                                                           | The [EventTime](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/AnalyticsListener.EventTime) of the position discontinuity. |
| `@`[Player.DiscontinuityReason](https://developer.android.com/reference/kotlin/androidx/media3/common/Player.DiscontinuityReason)` reason: `[Int](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html) | The [DiscontinuityReason](https://developer.android.com/reference/kotlin/androidx/media3/common/Player.DiscontinuityReason).                                   |

### updateSessionsWithTimelineChange

```
fun updateSessionsWithTimelineChange(
    eventTime: AnalyticsListener.EventTime!
): Unit
```

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

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

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