# PlaybackGlue

Artifact: [androidx.leanback:leanback](https://developer.android.com/jetpack/androidx/releases/leanback) [View Source](https://cs.android.com/search?q=file:androidx/leanback/media/PlaybackGlue.java+class:androidx.leanback.media.PlaybackGlue) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

*** ** * ** ***


```
public abstract class PlaybackGlue
```

<br />

Known direct subclasses [PlaybackBaseControlGlue](https://developer.android.com/reference/androidx/leanback/media/PlaybackBaseControlGlue), [PlaybackControlGlue](https://developer.android.com/reference/androidx/leanback/media/PlaybackControlGlue)

|---|---|
| `https://developer.android.com/reference/androidx/leanback/media/PlaybackBaseControlGlue` | A base abstract class for managing a `https://developer.android.com/reference/androidx/leanback/widget/PlaybackControlsRow` being displayed in `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost`. |
| `https://developer.android.com/reference/androidx/leanback/media/PlaybackControlGlue` | A helper class for managing a `https://developer.android.com/reference/androidx/leanback/widget/PlaybackControlsRow` and `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` that implements a recommended approach to handling standard playback control actions such as play/pause, fast forward/rewind at progressive speed levels, and skip to next/previous. |

Known indirect subclasses [MediaControllerGlue](https://developer.android.com/reference/androidx/leanback/media/MediaControllerGlue), [PlaybackBannerControlGlue](https://developer.android.com/reference/androidx/leanback/media/PlaybackBannerControlGlue), [PlaybackTransportControlGlue](https://developer.android.com/reference/androidx/leanback/media/PlaybackTransportControlGlue)

|---|---|
| `https://developer.android.com/reference/androidx/leanback/media/MediaControllerGlue` | **This class is deprecated.** Use `https://developer.android.com/reference/androidx/leanback/media/MediaControllerAdapter` with `https://developer.android.com/reference/androidx/leanback/media/PlaybackTransportControlGlue` or `https://developer.android.com/reference/androidx/leanback/media/PlaybackBannerControlGlue`. <br /> |
| `https://developer.android.com/reference/androidx/leanback/media/PlaybackBannerControlGlue` | A helper class for managing a `https://developer.android.com/reference/androidx/leanback/widget/PlaybackControlsRow` being displayed in `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost`. |
| `https://developer.android.com/reference/androidx/leanback/media/PlaybackTransportControlGlue` | A helper class for managing a `https://developer.android.com/reference/androidx/leanback/widget/PlaybackControlsRow` being displayed in `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost`, it supports standard playback control actions play/pause, and skip next/previous. |

*** ** * ** ***

Base class for abstraction of media play/pause feature. A subclass of PlaybackGlue will contain implementation of Media Player or a connection to playback Service. App initializes PlaybackGlue subclass, associated it with a `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost`. `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is typically implemented by a Fragment or an Activity, it provides the environment to render UI for PlaybackGlue object, it optionally provides SurfaceHolder via `https://developer.android.com/reference/androidx/leanback/media/SurfaceHolderGlueHost` to render video. A typical PlaybackGlue should release resources (e.g. MediaPlayer or connection to playback Service) in `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#onDetachedFromHost()`. `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#onDetachedFromHost()` is called in two cases:

- app manually change it using `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#setHost(androidx.leanback.media.PlaybackGlueHost)` call
- When host (fragment or activity) is destroyed

In rare case if an PlaybackGlue wants to live outside fragment / activity life cycle, it may manages resource release by itself.

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` |   |

## Summary

| ### Nested types |
|---|
| `public abstract class https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue.PlayerCallback` Interface to allow clients to take action once the video is ready to play and start stop. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#PlaybackGlue(android.content.Context)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html context)` Constructor. |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#addPlayerCallback(androidx.leanback.media.PlaybackGlue.PlayerCallback)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue.PlayerCallback playerCallback)` Add a PlayerCallback. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/android/content/Context.html` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#getContext()()` Returns the context. |
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#getHost()()` |
| `boolean` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#isPlaying()()` Returns true if media is currently playing. |
| `boolean` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#isPrepared()()` Returns true when the media player is prepared to start media playback. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#next()()` Goes to the next media item. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#pause()()` Pauses the media player. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#play()()` Starts the media player. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#playWhenPrepared()()` Starts play when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#isPrepared()` becomes true. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#previous()()` Goes to the previous media item. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#removePlayerCallback(androidx.leanback.media.PlaybackGlue.PlayerCallback)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue.PlayerCallback callback)` Remove a PlayerCallback. |
| `final void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#setHost(androidx.leanback.media.PlaybackGlueHost)(@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost host)` This method is used to associate a PlaybackGlue with the `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` which provides UI and optional `https://developer.android.com/reference/androidx/leanback/media/SurfaceHolderGlueHost`. |

| ### Protected methods |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue.PlayerCallback>` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#getPlayerCallbacks()()` |
| `void` | `@https://developer.android.com/reference/androidx/annotation/CallSuper https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#onAttachedToHost(androidx.leanback.media.PlaybackGlueHost)(@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost host)` This method is called attached to associated `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost`. |
| `void` | `@https://developer.android.com/reference/androidx/annotation/CallSuper https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#onDetachedFromHost()()` This method is called when current associated `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is attached to a different `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue` or `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is destroyed . |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#onHostPause()()` This method is called when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is paused. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#onHostResume()()` This method is called when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is resumed. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#onHostStart()()` This method is called when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is started. |
| `void` | `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#onHostStop()()` This method is called when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is stopped. |

## Public constructors

### PlaybackGlue

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public PlaybackGlue(@NonNull Context context)
```

Constructor.

## Public methods

### addPlayerCallback

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public void addPlayerCallback(@NonNull PlaybackGlue.PlayerCallback playerCallback)
```

Add a PlayerCallback.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue.PlayerCallback playerCallback` | The callback to add. |

### getContext

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public @NonNull Context getContext()
```

Returns the context.

### getHost

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public @Nullable PlaybackGlueHost getHost()
```

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` | Associated `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` or null if not attached to host. |

### isPlaying

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public boolean isPlaying()
```

Returns true if media is currently playing.

### isPrepared

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public boolean isPrepared()
```

Returns true when the media player is prepared to start media playback. When returning false, app may listen to `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue.PlayerCallback#onPreparedStateChanged(androidx.leanback.media.PlaybackGlue)` event.

| Returns |
|---|---|
| `boolean` | True if prepared, false otherwise. |

### next

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public void next()
```

Goes to the next media item. This method is optional.

### pause

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public void pause()
```

Pauses the media player.

### play

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public void play()
```

Starts the media player. Does nothing if `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#isPrepared()` is false. To wait `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#isPrepared()` to be true before playing, use `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#playWhenPrepared()`.

### playWhenPrepared

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public void playWhenPrepared()
```

Starts play when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue#isPrepared()` becomes true.

### previous

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public void previous()
```

Goes to the previous media item. This method is optional.

### removePlayerCallback

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public void removePlayerCallback(@NonNull PlaybackGlue.PlayerCallback callback)
```

Remove a PlayerCallback.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/NonNull.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue.PlayerCallback callback` | The callback to remove. |

### setHost

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
public final void setHost(@Nullable PlaybackGlueHost host)
```

This method is used to associate a PlaybackGlue with the `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` which provides UI and optional `https://developer.android.com/reference/androidx/leanback/media/SurfaceHolderGlueHost`.

| Parameters |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost host` | The host for the PlaybackGlue. Set to null to detach from the host. |

## Protected methods

### getPlayerCallbacks

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
protected @Nullable List<PlaybackGlue.PlayerCallback> getPlayerCallbacks()
```

| Returns |
|---|---|
| `@https://jspecify.dev/docs/api/org/jspecify/annotations/Nullable.html https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue.PlayerCallback>` | A snapshot of list of PlayerCallbacks set on the Glue. |

### onAttachedToHost

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
@CallSuper
protected void onAttachedToHost(@NonNull PlaybackGlueHost host)
```

This method is called attached to associated `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost`. Subclass may override and call super.onAttachedToHost().

### onDetachedFromHost

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
@CallSuper
protected void onDetachedFromHost()
```

This method is called when current associated `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is attached to a different `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlue` or `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is destroyed . Subclass may override and call super.onDetachedFromHost() at last. A typical PlaybackGlue will release resources (e.g. MediaPlayer or connection to playback service) in this method.

### onHostPause

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
protected void onHostPause()
```

This method is called when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is paused. Subclass may override.

### onHostResume

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
protected void onHostResume()
```

This method is called when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is resumed. Subclass may override.

### onHostStart

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
protected void onHostStart()
```

This method is called when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is started. Subclass may override.

### onHostStop

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/leanback#1.1.0)

```
protected void onHostStop()
```

This method is called when `https://developer.android.com/reference/androidx/leanback/media/PlaybackGlueHost` is stopped. Subclass may override.