# DefaultPlaybackSessionManager

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/DefaultPlaybackSessionManager.java+class:androidx.media3.exoplayer.analytics.DefaultPlaybackSessionManager)

*** ** * ** ***

<br />

```
@UnstableApi
public final class DefaultPlaybackSessionManager implements PlaybackSessionManager
```

<br />

*** ** * ** ***

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.

By default, sessions are identified by Base64-encoded, URL-safe, random strings.

## Summary

| ### Constants |
|---|---|
| `static final https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/java/lang/String.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#DEFAULT_SESSION_ID_GENERATOR()` Default generator for unique session ids that are random, Based64-encoded and URL-safe. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#DefaultPlaybackSessionManager()()` Creates session manager with a `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#DEFAULT_SESSION_ID_GENERATOR()` to generate session ids. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#DefaultPlaybackSessionManager(com.google.common.base.Supplier<java.lang.String>)(https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/java/lang/String.html> sessionIdGenerator)` Creates session manager. |

| ### Public methods |
|---|---|
| `synchronized boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#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. |
| `synchronized void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#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. |
| `synchronized @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/DefaultPlaybackSessionManager#getActiveSessionId()()` Returns the session identifier of the session that is currently actively playing, or ` null` if there no such session. |
| `synchronized https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#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. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#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. |
| `synchronized void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#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`. |
| `synchronized void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#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`. |
| `synchronized void` | `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#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`. |

## Constants

### DEFAULT_SESSION_ID_GENERATOR

```
public static final Supplier<String> DEFAULT_SESSION_ID_GENERATOR
```

Default generator for unique session ids that are random, Based64-encoded and URL-safe.

## Public constructors

### DefaultPlaybackSessionManager

```
public DefaultPlaybackSessionManager()
```

Creates session manager with a `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultPlaybackSessionManager#DEFAULT_SESSION_ID_GENERATOR()` to generate session ids.

### DefaultPlaybackSessionManager

```
public DefaultPlaybackSessionManager(Supplier<String> sessionIdGenerator)
```

Creates session manager.

| Parameters |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/java/lang/String.html> sessionIdGenerator` | A generator for new session ids. All generated session ids must be unique. |

## Public methods

### belongsToSession

```
synchronized public 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

```
synchronized public 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

```
synchronized public @Nullable String getActiveSessionId()
```

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

### getSessionForMediaPeriodId

```
synchronized public 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

```
public 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

```
synchronized public 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

```
synchronized public 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

```
synchronized public 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. |