christosts 482871fed4 Update javadoc for ExoPlayer 2.18.3
#minor-release

PiperOrigin-RevId: 509867431
2023-02-15 18:37:02 +00:00

2849 lines
204 KiB
HTML

<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head><!-- start favicons snippet, use https://realfavicongenerator.net/ --><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png"><link rel="manifest" href="/assets/site.webmanifest"><link rel="mask-icon" href="/assets/safari-pinned-tab.svg" color="#fc4d50"><link rel="shortcut icon" href="/assets/favicon.ico"><meta name="msapplication-TileColor" content="#ffc40d"><meta name="msapplication-config" content="/assets/browserconfig.xml"><meta name="theme-color" content="#ffffff"><!-- end favicons snippet -->
<title>SimpleBasePlayer (ExoPlayer library)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="SimpleBasePlayer (ExoPlayer library)";
}
}
catch(err) {
}
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":6,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":10,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":10,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":10,"i93":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
var useModuleDirectories = false;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.google.android.exoplayer2</a></div>
<h2 title="Class SimpleBasePlayer" class="title">Class SimpleBasePlayer</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li><a href="BasePlayer.html" title="class in com.google.android.exoplayer2">com.google.android.exoplayer2.BasePlayer</a></li>
<li>
<ul class="inheritance">
<li>com.google.android.exoplayer2.SimpleBasePlayer</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="Player.html" title="interface in com.google.android.exoplayer2">Player</a></code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="LegacyMediaPlayerWrapper.html" title="class in com.google.android.exoplayer2">LegacyMediaPlayerWrapper</a></code></dd>
</dl>
<hr>
<pre>public abstract class <span class="typeNameLabel">SimpleBasePlayer</span>
extends <a href="BasePlayer.html" title="class in com.google.android.exoplayer2">BasePlayer</a></pre>
<div class="block">A base implementation for <a href="Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> that reduces the number of methods to implement to a
minimum.
<p>Implementation notes:
<ul>
<li>Subclasses must override <a href="#getState()"><code>getState()</code></a> to populate the current player state on
request.
<li>The <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a> should set the <a href="SimpleBasePlayer.State.Builder.html#setAvailableCommands(com.google.android.exoplayer2.Player.Commands)">available
commands</a> to indicate which <a href="Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> methods are supported.
<li>All setter-like player methods (for example, <a href="#setPlayWhenReady(boolean)"><code>setPlayWhenReady(boolean)</code></a>) forward to
overridable methods (for example, <a href="#handleSetPlayWhenReady(boolean)"><code>handleSetPlayWhenReady(boolean)</code></a>) that can be used to
handle these requests. These methods return a <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> to indicate when the
request has been handled and is fully reflected in the values returned from <a href="#getState()"><code>getState()</code></a>. This class will automatically request a state update once the request is done.
If the state changes can be handled synchronously, these methods can return Guava's <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/Futures.html?is-external=true#immediateVoidFuture()" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>Futures.immediateVoidFuture()</code></a>.
<li>Subclasses can manually trigger state updates with <a href="#invalidateState()"><code>invalidateState()</code></a>, for example if
something changes independent of <a href="Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> method calls.
</ul>
This base class handles various aspects of the player implementation to simplify the subclass:
<ul>
<li>The <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a> can only be created with allowed combinations of state values, avoiding
any invalid player states.
<li>Only functionality that is declared as <a href="Player.Command.html" title="annotation in com.google.android.exoplayer2">available</a> needs to be
implemented. Other methods are automatically ignored.
<li>Listener handling and informing listeners of state changes is handled automatically.
<li>The base class provides a framework for asynchronous handling of method calls. It changes
the visible playback state immediately to the most likely outcome to ensure the
user-visible state changes look like synchronous operations. The state is then updated
again once the asynchronous method calls have been fully handled.
</ul></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SimpleBasePlayer.MediaItemData.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.MediaItemData</a></span></code></th>
<td class="colLast">
<div class="block">An immutable description of an item in the playlist, containing both static setup information
like <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> and dynamic data that is generally read from the media like the
duration.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SimpleBasePlayer.PeriodData.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.PeriodData</a></span></code></th>
<td class="colLast">
<div class="block">Data describing the properties of a period inside a <a href="SimpleBasePlayer.MediaItemData.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.MediaItemData</code></a>.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected static interface&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SimpleBasePlayer.PositionSupplier.html" title="interface in com.google.android.exoplayer2">SimpleBasePlayer.PositionSupplier</a></span></code></th>
<td class="colLast">
<div class="block">A supplier for a position.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.State</a></span></code></th>
<td class="colLast">
<div class="block">An immutable state description of the player.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="nested.classes.inherited.from.class.com.google.android.exoplayer2.Player">
<!-- -->
</a>
<h3>Nested classes/interfaces inherited from interface&nbsp;com.google.android.exoplayer2.<a href="Player.html" title="interface in com.google.android.exoplayer2">Player</a></h3>
<code><a href="Player.Command.html" title="annotation in com.google.android.exoplayer2">Player.Command</a>, <a href="Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a>, <a href="Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">Player.DiscontinuityReason</a>, <a href="Player.Event.html" title="annotation in com.google.android.exoplayer2">Player.Event</a>, <a href="Player.Events.html" title="class in com.google.android.exoplayer2">Player.Events</a>, <a href="Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a>, <a href="Player.MediaItemTransitionReason.html" title="annotation in com.google.android.exoplayer2">Player.MediaItemTransitionReason</a>, <a href="Player.PlaybackSuppressionReason.html" title="annotation in com.google.android.exoplayer2">Player.PlaybackSuppressionReason</a>, <a href="Player.PlayWhenReadyChangeReason.html" title="annotation in com.google.android.exoplayer2">Player.PlayWhenReadyChangeReason</a>, <a href="Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>, <a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2">Player.RepeatMode</a>, <a href="Player.TimelineChangeReason.html" title="annotation in com.google.android.exoplayer2">Player.TimelineChangeReason</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- =========== FIELD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.com.google.android.exoplayer2.BasePlayer">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;com.google.android.exoplayer2.<a href="BasePlayer.html" title="class in com.google.android.exoplayer2">BasePlayer</a></h3>
<code><a href="BasePlayer.html#window">window</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.com.google.android.exoplayer2.Player">
<!-- -->
</a>
<h3>Fields inherited from interface&nbsp;com.google.android.exoplayer2.<a href="Player.html" title="interface in com.google.android.exoplayer2">Player</a></h3>
<code><a href="Player.html#COMMAND_ADJUST_DEVICE_VOLUME">COMMAND_ADJUST_DEVICE_VOLUME</a>, <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS">COMMAND_CHANGE_MEDIA_ITEMS</a>, <a href="Player.html#COMMAND_GET_AUDIO_ATTRIBUTES">COMMAND_GET_AUDIO_ATTRIBUTES</a>, <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM">COMMAND_GET_CURRENT_MEDIA_ITEM</a>, <a href="Player.html#COMMAND_GET_DEVICE_VOLUME">COMMAND_GET_DEVICE_VOLUME</a>, <a href="Player.html#COMMAND_GET_MEDIA_ITEMS_METADATA">COMMAND_GET_MEDIA_ITEMS_METADATA</a>, <a href="Player.html#COMMAND_GET_TEXT">COMMAND_GET_TEXT</a>, <a href="Player.html#COMMAND_GET_TIMELINE">COMMAND_GET_TIMELINE</a>, <a href="Player.html#COMMAND_GET_TRACKS">COMMAND_GET_TRACKS</a>, <a href="Player.html#COMMAND_GET_VOLUME">COMMAND_GET_VOLUME</a>, <a href="Player.html#COMMAND_INVALID">COMMAND_INVALID</a>, <a href="Player.html#COMMAND_PLAY_PAUSE">COMMAND_PLAY_PAUSE</a>, <a href="Player.html#COMMAND_PREPARE">COMMAND_PREPARE</a>, <a href="Player.html#COMMAND_SEEK_BACK">COMMAND_SEEK_BACK</a>, <a href="Player.html#COMMAND_SEEK_FORWARD">COMMAND_SEEK_FORWARD</a>, <a href="Player.html#COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM">COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM</a>, <a href="Player.html#COMMAND_SEEK_IN_CURRENT_WINDOW">COMMAND_SEEK_IN_CURRENT_WINDOW</a>, <a href="Player.html#COMMAND_SEEK_TO_DEFAULT_POSITION">COMMAND_SEEK_TO_DEFAULT_POSITION</a>, <a href="Player.html#COMMAND_SEEK_TO_MEDIA_ITEM">COMMAND_SEEK_TO_MEDIA_ITEM</a>, <a href="Player.html#COMMAND_SEEK_TO_NEXT">COMMAND_SEEK_TO_NEXT</a>, <a href="Player.html#COMMAND_SEEK_TO_NEXT_MEDIA_ITEM">COMMAND_SEEK_TO_NEXT_MEDIA_ITEM</a>, <a href="Player.html#COMMAND_SEEK_TO_NEXT_WINDOW">COMMAND_SEEK_TO_NEXT_WINDOW</a>, <a href="Player.html#COMMAND_SEEK_TO_PREVIOUS">COMMAND_SEEK_TO_PREVIOUS</a>, <a href="Player.html#COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM">COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM</a>, <a href="Player.html#COMMAND_SEEK_TO_PREVIOUS_WINDOW">COMMAND_SEEK_TO_PREVIOUS_WINDOW</a>, <a href="Player.html#COMMAND_SEEK_TO_WINDOW">COMMAND_SEEK_TO_WINDOW</a>, <a href="Player.html#COMMAND_SET_DEVICE_VOLUME">COMMAND_SET_DEVICE_VOLUME</a>, <a href="Player.html#COMMAND_SET_MEDIA_ITEM">COMMAND_SET_MEDIA_ITEM</a>, <a href="Player.html#COMMAND_SET_MEDIA_ITEMS_METADATA">COMMAND_SET_MEDIA_ITEMS_METADATA</a>, <a href="Player.html#COMMAND_SET_REPEAT_MODE">COMMAND_SET_REPEAT_MODE</a>, <a href="Player.html#COMMAND_SET_SHUFFLE_MODE">COMMAND_SET_SHUFFLE_MODE</a>, <a href="Player.html#COMMAND_SET_SPEED_AND_PITCH">COMMAND_SET_SPEED_AND_PITCH</a>, <a href="Player.html#COMMAND_SET_TRACK_SELECTION_PARAMETERS">COMMAND_SET_TRACK_SELECTION_PARAMETERS</a>, <a href="Player.html#COMMAND_SET_VIDEO_SURFACE">COMMAND_SET_VIDEO_SURFACE</a>, <a href="Player.html#COMMAND_SET_VOLUME">COMMAND_SET_VOLUME</a>, <a href="Player.html#COMMAND_STOP">COMMAND_STOP</a>, <a href="Player.html#DISCONTINUITY_REASON_AUTO_TRANSITION">DISCONTINUITY_REASON_AUTO_TRANSITION</a>, <a href="Player.html#DISCONTINUITY_REASON_INTERNAL">DISCONTINUITY_REASON_INTERNAL</a>, <a href="Player.html#DISCONTINUITY_REASON_REMOVE">DISCONTINUITY_REASON_REMOVE</a>, <a href="Player.html#DISCONTINUITY_REASON_SEEK">DISCONTINUITY_REASON_SEEK</a>, <a href="Player.html#DISCONTINUITY_REASON_SEEK_ADJUSTMENT">DISCONTINUITY_REASON_SEEK_ADJUSTMENT</a>, <a href="Player.html#DISCONTINUITY_REASON_SKIP">DISCONTINUITY_REASON_SKIP</a>, <a href="Player.html#EVENT_AUDIO_ATTRIBUTES_CHANGED">EVENT_AUDIO_ATTRIBUTES_CHANGED</a>, <a href="Player.html#EVENT_AUDIO_SESSION_ID">EVENT_AUDIO_SESSION_ID</a>, <a href="Player.html#EVENT_AVAILABLE_COMMANDS_CHANGED">EVENT_AVAILABLE_COMMANDS_CHANGED</a>, <a href="Player.html#EVENT_CUES">EVENT_CUES</a>, <a href="Player.html#EVENT_DEVICE_INFO_CHANGED">EVENT_DEVICE_INFO_CHANGED</a>, <a href="Player.html#EVENT_DEVICE_VOLUME_CHANGED">EVENT_DEVICE_VOLUME_CHANGED</a>, <a href="Player.html#EVENT_IS_LOADING_CHANGED">EVENT_IS_LOADING_CHANGED</a>, <a href="Player.html#EVENT_IS_PLAYING_CHANGED">EVENT_IS_PLAYING_CHANGED</a>, <a href="Player.html#EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED">EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED</a>, <a href="Player.html#EVENT_MEDIA_ITEM_TRANSITION">EVENT_MEDIA_ITEM_TRANSITION</a>, <a href="Player.html#EVENT_MEDIA_METADATA_CHANGED">EVENT_MEDIA_METADATA_CHANGED</a>, <a href="Player.html#EVENT_METADATA">EVENT_METADATA</a>, <a href="Player.html#EVENT_PLAY_WHEN_READY_CHANGED">EVENT_PLAY_WHEN_READY_CHANGED</a>, <a href="Player.html#EVENT_PLAYBACK_PARAMETERS_CHANGED">EVENT_PLAYBACK_PARAMETERS_CHANGED</a>, <a href="Player.html#EVENT_PLAYBACK_STATE_CHANGED">EVENT_PLAYBACK_STATE_CHANGED</a>, <a href="Player.html#EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED">EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED</a>, <a href="Player.html#EVENT_PLAYER_ERROR">EVENT_PLAYER_ERROR</a>, <a href="Player.html#EVENT_PLAYLIST_METADATA_CHANGED">EVENT_PLAYLIST_METADATA_CHANGED</a>, <a href="Player.html#EVENT_POSITION_DISCONTINUITY">EVENT_POSITION_DISCONTINUITY</a>, <a href="Player.html#EVENT_RENDERED_FIRST_FRAME">EVENT_RENDERED_FIRST_FRAME</a>, <a href="Player.html#EVENT_REPEAT_MODE_CHANGED">EVENT_REPEAT_MODE_CHANGED</a>, <a href="Player.html#EVENT_SEEK_BACK_INCREMENT_CHANGED">EVENT_SEEK_BACK_INCREMENT_CHANGED</a>, <a href="Player.html#EVENT_SEEK_FORWARD_INCREMENT_CHANGED">EVENT_SEEK_FORWARD_INCREMENT_CHANGED</a>, <a href="Player.html#EVENT_SHUFFLE_MODE_ENABLED_CHANGED">EVENT_SHUFFLE_MODE_ENABLED_CHANGED</a>, <a href="Player.html#EVENT_SKIP_SILENCE_ENABLED_CHANGED">EVENT_SKIP_SILENCE_ENABLED_CHANGED</a>, <a href="Player.html#EVENT_SURFACE_SIZE_CHANGED">EVENT_SURFACE_SIZE_CHANGED</a>, <a href="Player.html#EVENT_TIMELINE_CHANGED">EVENT_TIMELINE_CHANGED</a>, <a href="Player.html#EVENT_TRACK_SELECTION_PARAMETERS_CHANGED">EVENT_TRACK_SELECTION_PARAMETERS_CHANGED</a>, <a href="Player.html#EVENT_TRACKS_CHANGED">EVENT_TRACKS_CHANGED</a>, <a href="Player.html#EVENT_VIDEO_SIZE_CHANGED">EVENT_VIDEO_SIZE_CHANGED</a>, <a href="Player.html#EVENT_VOLUME_CHANGED">EVENT_VOLUME_CHANGED</a>, <a href="Player.html#MEDIA_ITEM_TRANSITION_REASON_AUTO">MEDIA_ITEM_TRANSITION_REASON_AUTO</a>, <a href="Player.html#MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED">MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED</a>, <a href="Player.html#MEDIA_ITEM_TRANSITION_REASON_REPEAT">MEDIA_ITEM_TRANSITION_REASON_REPEAT</a>, <a href="Player.html#MEDIA_ITEM_TRANSITION_REASON_SEEK">MEDIA_ITEM_TRANSITION_REASON_SEEK</a>, <a href="Player.html#PLAY_WHEN_READY_CHANGE_REASON_AUDIO_BECOMING_NOISY">PLAY_WHEN_READY_CHANGE_REASON_AUDIO_BECOMING_NOISY</a>, <a href="Player.html#PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS">PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS</a>, <a href="Player.html#PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM">PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM</a>, <a href="Player.html#PLAY_WHEN_READY_CHANGE_REASON_REMOTE">PLAY_WHEN_READY_CHANGE_REASON_REMOTE</a>, <a href="Player.html#PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST">PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST</a>, <a href="Player.html#PLAYBACK_SUPPRESSION_REASON_NONE">PLAYBACK_SUPPRESSION_REASON_NONE</a>, <a href="Player.html#PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS">PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS</a>, <a href="Player.html#REPEAT_MODE_ALL">REPEAT_MODE_ALL</a>, <a href="Player.html#REPEAT_MODE_OFF">REPEAT_MODE_OFF</a>, <a href="Player.html#REPEAT_MODE_ONE">REPEAT_MODE_ONE</a>, <a href="Player.html#STATE_BUFFERING">STATE_BUFFERING</a>, <a href="Player.html#STATE_ENDED">STATE_ENDED</a>, <a href="Player.html#STATE_IDLE">STATE_IDLE</a>, <a href="Player.html#STATE_READY">STATE_READY</a>, <a href="Player.html#TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED">TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED</a>, <a href="Player.html#TIMELINE_CHANGE_REASON_SOURCE_UPDATE">TIMELINE_CHANGE_REASON_SOURCE_UPDATE</a></code></li>
</ul>
</li>
</ul>
</section>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier</th>
<th class="colSecond" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(android.os.Looper)">SimpleBasePlayer</a></span>&#8203;(<a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top">Looper</a>&nbsp;applicationLooper)</code></th>
<td class="colLast">
<div class="block">Creates the base class.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected </code></td>
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="#%3Cinit%3E(android.os.Looper,com.google.android.exoplayer2.util.Clock)">SimpleBasePlayer</a></span>&#8203;(<a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top">Looper</a>&nbsp;applicationLooper,
<a href="util/Clock.html" title="interface in com.google.android.exoplayer2.util">Clock</a>&nbsp;clock)</code></th>
<td class="colLast">
<div class="block">Creates the base class.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addListener(com.google.android.exoplayer2.Player.Listener)">addListener</a></span>&#8203;(<a href="Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a>&nbsp;listener)</code></th>
<td class="colLast">
<div class="block">Registers a listener to receive all events from the player.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#addMediaItems(int,java.util.List)">addMediaItems</a></span>&#8203;(int&nbsp;index,
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems)</code></th>
<td class="colLast">
<div class="block">Adds a list of media items at the given index of the playlist.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clearVideoSurface()">clearVideoSurface</a></span>()</code></th>
<td class="colLast">
<div class="block">Clears any <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink"><code>Surface</code></a>, <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a>, <a href="https://developer.android.com/reference/android/view/SurfaceView.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>SurfaceView</code></a> or <a href="https://developer.android.com/reference/android/view/TextureView.html?is-external=true" title="class or interface in android.view" class="externalLink" target="_top"><code>TextureView</code></a>
currently set on the player.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clearVideoSurface(android.view.Surface)">clearVideoSurface</a></span>&#8203;(<a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top">Surface</a>&nbsp;surface)</code></th>
<td class="colLast">
<div class="block">Clears the <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a> onto which video is being rendered if it matches the one passed.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clearVideoSurfaceHolder(android.view.SurfaceHolder)">clearVideoSurfaceHolder</a></span>&#8203;(<a href="https://developer.android.com/reference/android/view/SurfaceHolder.html" title="class or interface in android.view" class="externalLink" target="_top">SurfaceHolder</a>&nbsp;surfaceHolder)</code></th>
<td class="colLast">
<div class="block">Clears the <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a> that holds the <a href="https://developer.android.com/reference/android/view/Surface.html?is-external=true" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a> onto which video is being
rendered if it matches the one passed.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clearVideoSurfaceView(android.view.SurfaceView)">clearVideoSurfaceView</a></span>&#8203;(<a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink" target="_top">SurfaceView</a>&nbsp;surfaceView)</code></th>
<td class="colLast">
<div class="block">Clears the <a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink" target="_top"><code>SurfaceView</code></a> onto which video is being rendered if it matches the one passed.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#clearVideoTextureView(android.view.TextureView)">clearVideoTextureView</a></span>&#8203;(<a href="https://developer.android.com/reference/android/view/TextureView.html" title="class or interface in android.view" class="externalLink" target="_top">TextureView</a>&nbsp;textureView)</code></th>
<td class="colLast">
<div class="block">Clears the <a href="https://developer.android.com/reference/android/view/TextureView.html" title="class or interface in android.view" class="externalLink" target="_top"><code>TextureView</code></a> onto which video is being rendered if it matches the one passed.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#decreaseDeviceVolume()">decreaseDeviceVolume</a></span>()</code></th>
<td class="colLast">
<div class="block">Decreases the volume of the device.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top">Looper</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getApplicationLooper()">getApplicationLooper</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> associated with the application thread that's used to access the
player and on which player events are received.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code><a href="audio/AudioAttributes.html" title="class in com.google.android.exoplayer2.audio">AudioAttributes</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getAudioAttributes()">getAudioAttributes</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the attributes for audio playback.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code><a href="Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getAvailableCommands()">getAvailableCommands</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the player's currently available <a href="Player.Commands.html" title="class in com.google.android.exoplayer2"><code>Player.Commands</code></a>.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getBufferedPosition()">getBufferedPosition</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns an estimate of the position in the current content or ad up to which data is buffered,
in milliseconds.</div>
</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getContentBufferedPosition()">getContentBufferedPosition</a></span>()</code></th>
<td class="colLast">
<div class="block">If <a href="Player.html#isPlayingAd()"><code>Player.isPlayingAd()</code></a> returns <code>true</code>, returns an estimate of the content position in
the current content up to which data is buffered, in milliseconds.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getContentPosition()">getContentPosition</a></span>()</code></th>
<td class="colLast">
<div class="block">If <a href="Player.html#isPlayingAd()"><code>Player.isPlayingAd()</code></a> returns <code>true</code>, returns the content position that will be
played once all ads in the ad group have finished playing, in milliseconds.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentAdGroupIndex()">getCurrentAdGroupIndex</a></span>()</code></th>
<td class="colLast">
<div class="block">If <a href="Player.html#isPlayingAd()"><code>Player.isPlayingAd()</code></a> returns true, returns the index of the ad group in the period
currently being played.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentAdIndexInAdGroup()">getCurrentAdIndexInAdGroup</a></span>()</code></th>
<td class="colLast">
<div class="block">If <a href="Player.html#isPlayingAd()"><code>Player.isPlayingAd()</code></a> returns true, returns the index of the ad in its ad group.</div>
</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code><a href="text/CueGroup.html" title="class in com.google.android.exoplayer2.text">CueGroup</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentCues()">getCurrentCues</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the current <a href="text/CueGroup.html" title="class in com.google.android.exoplayer2.text"><code>CueGroup</code></a>.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentMediaItemIndex()">getCurrentMediaItemIndex</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the index of the current <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> in the <a href="Player.html#getCurrentTimeline()"><code>timeline</code></a>, or the prospective index if the <a href="Player.html#getCurrentTimeline()"><code>current timeline</code></a> is
empty.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentPeriodIndex()">getCurrentPeriodIndex</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the index of the period currently being played.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentPosition()">getCurrentPosition</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the playback position in the current content or ad, in milliseconds, or the prospective
position in milliseconds if the <a href="Player.html#getCurrentTimeline()"><code>current timeline</code></a> is empty.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code><a href="Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentTimeline()">getCurrentTimeline</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the current <a href="Timeline.html" title="class in com.google.android.exoplayer2"><code>Timeline</code></a>.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code><a href="Tracks.html" title="class in com.google.android.exoplayer2">Tracks</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getCurrentTracks()">getCurrentTracks</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the current tracks.</div>
</td>
</tr>
<tr id="i22" class="altColor">
<td class="colFirst"><code><a href="DeviceInfo.html" title="class in com.google.android.exoplayer2">DeviceInfo</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDeviceInfo()">getDeviceInfo</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets the device information.</div>
</td>
</tr>
<tr id="i23" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDeviceVolume()">getDeviceVolume</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets the current volume of the device.</div>
</td>
</tr>
<tr id="i24" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getDuration()">getDuration</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the duration of the current content or ad in milliseconds, or <a href="C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if
the duration is not known.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMaxSeekToPreviousPosition()">getMaxSeekToPreviousPosition</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the maximum position for which <a href="Player.html#seekToPrevious()"><code>Player.seekToPrevious()</code></a> seeks to the previous <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a>, in milliseconds.</div>
</td>
</tr>
<tr id="i26" class="altColor">
<td class="colFirst"><code><a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getMediaMetadata()">getMediaMetadata</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the current combined <a href="MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>, or <a href="MediaMetadata.html#EMPTY"><code>MediaMetadata.EMPTY</code></a> if not
supported.</div>
</td>
</tr>
<tr id="i27" class="rowColor">
<td class="colFirst"><code>protected <a href="SimpleBasePlayer.MediaItemData.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.MediaItemData</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPlaceholderMediaItemData(com.google.android.exoplayer2.MediaItem)">getPlaceholderMediaItemData</a></span>&#8203;(<a href="MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a>&nbsp;mediaItem)</code></th>
<td class="colLast">
<div class="block">Returns the placeholder <a href="SimpleBasePlayer.MediaItemData.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.MediaItemData</code></a> used for a new <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> added to the
playlist.</div>
</td>
</tr>
<tr id="i28" class="altColor">
<td class="colFirst"><code>protected <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.State</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPlaceholderState(com.google.android.exoplayer2.SimpleBasePlayer.State)">getPlaceholderState</a></span>&#8203;(<a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.State</a>&nbsp;suggestedPlaceholderState)</code></th>
<td class="colLast">
<div class="block">Returns the placeholder state used while a player method is handled asynchronously.</div>
</td>
</tr>
<tr id="i29" class="rowColor">
<td class="colFirst"><code><a href="PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPlaybackParameters()">getPlaybackParameters</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the currently active playback parameters.</div>
</td>
</tr>
<tr id="i30" class="altColor">
<td class="colFirst"><code>@com.google.android.exoplayer2.Player.State int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPlaybackState()">getPlaybackState</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the current <a href="Player.State.html" title="annotation in com.google.android.exoplayer2">playback state</a> of the player.</div>
</td>
</tr>
<tr id="i31" class="rowColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPlaybackSuppressionReason()">getPlaybackSuppressionReason</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the reason why playback is suppressed even though <a href="Player.html#getPlayWhenReady()"><code>Player.getPlayWhenReady()</code></a> is <code>
true</code>, or <a href="Player.html#PLAYBACK_SUPPRESSION_REASON_NONE"><code>Player.PLAYBACK_SUPPRESSION_REASON_NONE</code></a> if playback is not suppressed.</div>
</td>
</tr>
<tr id="i32" class="altColor">
<td class="colFirst"><code><a href="PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPlayerError()">getPlayerError</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the error that caused playback to fail.</div>
</td>
</tr>
<tr id="i33" class="rowColor">
<td class="colFirst"><code><a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPlaylistMetadata()">getPlaylistMetadata</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the playlist <a href="MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>, as set by <a href="Player.html#setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)"><code>Player.setPlaylistMetadata(MediaMetadata)</code></a>, or <a href="MediaMetadata.html#EMPTY"><code>MediaMetadata.EMPTY</code></a> if not supported.</div>
</td>
</tr>
<tr id="i34" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getPlayWhenReady()">getPlayWhenReady</a></span>()</code></th>
<td class="colLast">
<div class="block">Whether playback will proceed when <a href="Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> == <a href="Player.html#STATE_READY"><code>Player.STATE_READY</code></a>.</div>
</td>
</tr>
<tr id="i35" class="rowColor">
<td class="colFirst"><code>@com.google.android.exoplayer2.Player.RepeatMode int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getRepeatMode()">getRepeatMode</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the current <a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2"><code>Player.RepeatMode</code></a> used for playback.</div>
</td>
</tr>
<tr id="i36" class="altColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSeekBackIncrement()">getSeekBackIncrement</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the <a href="Player.html#seekBack()"><code>Player.seekBack()</code></a> increment.</div>
</td>
</tr>
<tr id="i37" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSeekForwardIncrement()">getSeekForwardIncrement</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the <a href="Player.html#seekForward()"><code>Player.seekForward()</code></a> increment.</div>
</td>
</tr>
<tr id="i38" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getShuffleModeEnabled()">getShuffleModeEnabled</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns whether shuffling of media items is enabled.</div>
</td>
</tr>
<tr id="i39" class="rowColor">
<td class="colFirst"><code>protected abstract <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.State</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getState()">getState</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the current <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a> of the player.</div>
</td>
</tr>
<tr id="i40" class="altColor">
<td class="colFirst"><code><a href="util/Size.html" title="class in com.google.android.exoplayer2.util">Size</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getSurfaceSize()">getSurfaceSize</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets the size of the surface on which the video is rendered.</div>
</td>
</tr>
<tr id="i41" class="rowColor">
<td class="colFirst"><code>long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTotalBufferedDuration()">getTotalBufferedDuration</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns an estimate of the total buffered duration from the current position, in milliseconds.</div>
</td>
</tr>
<tr id="i42" class="altColor">
<td class="colFirst"><code><a href="trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getTrackSelectionParameters()">getTrackSelectionParameters</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the parameters constraining the track selection.</div>
</td>
</tr>
<tr id="i43" class="rowColor">
<td class="colFirst"><code><a href="video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getVideoSize()">getVideoSize</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets the size of the video.</div>
</td>
</tr>
<tr id="i44" class="altColor">
<td class="colFirst"><code>float</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getVolume()">getVolume</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns the audio volume, with 0 being silence and 1 being unity gain (signal unchanged).</div>
</td>
</tr>
<tr id="i45" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleAddMediaItems(int,java.util.List)">handleAddMediaItems</a></span>&#8203;(int&nbsp;index,
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#addMediaItem(com.google.android.exoplayer2.MediaItem)"><code>Player.addMediaItem(com.google.android.exoplayer2.MediaItem)</code></a> and <a href="Player.html#addMediaItems(java.util.List)"><code>Player.addMediaItems(java.util.List&lt;com.google.android.exoplayer2.MediaItem&gt;)</code></a>.</div>
</td>
</tr>
<tr id="i46" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleClearVideoOutput(java.lang.Object)">handleClearVideoOutput</a></span>&#8203;(<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;videoOutput)</code></th>
<td class="colLast">
<div class="block">Handles calls to clear the video output.</div>
</td>
</tr>
<tr id="i47" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleDecreaseDeviceVolume()">handleDecreaseDeviceVolume</a></span>()</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#decreaseDeviceVolume()"><code>Player.decreaseDeviceVolume()</code></a>.</div>
</td>
</tr>
<tr id="i48" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleIncreaseDeviceVolume()">handleIncreaseDeviceVolume</a></span>()</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#increaseDeviceVolume()"><code>Player.increaseDeviceVolume()</code></a>.</div>
</td>
</tr>
<tr id="i49" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleMoveMediaItems(int,int,int)">handleMoveMediaItems</a></span>&#8203;(int&nbsp;fromIndex,
int&nbsp;toIndex,
int&nbsp;newIndex)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#moveMediaItem(int,int)"><code>Player.moveMediaItem(int, int)</code></a> and <a href="Player.html#moveMediaItems(int,int,int)"><code>Player.moveMediaItems(int, int, int)</code></a>.</div>
</td>
</tr>
<tr id="i50" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handlePrepare()">handlePrepare</a></span>()</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#prepare()"><code>Player.prepare()</code></a>.</div>
</td>
</tr>
<tr id="i51" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleRelease()">handleRelease</a></span>()</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#release()"><code>Player.release()</code></a>.</div>
</td>
</tr>
<tr id="i52" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleRemoveMediaItems(int,int)">handleRemoveMediaItems</a></span>&#8203;(int&nbsp;fromIndex,
int&nbsp;toIndex)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#removeMediaItem(int)"><code>Player.removeMediaItem(int)</code></a> and <a href="Player.html#removeMediaItems(int,int)"><code>Player.removeMediaItems(int, int)</code></a>.</div>
</td>
</tr>
<tr id="i53" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSeek(int,long,@com.google.android.exoplayer2.Player.Commandint)">handleSeek</a></span>&#8203;(int&nbsp;mediaItemIndex,
long&nbsp;positionMs,
@com.google.android.exoplayer2.Player.Command int&nbsp;seekCommand)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#seekTo(long)"><code>Player.seekTo(long)</code></a> and other seek operations (for example, <a href="Player.html#seekToNext()"><code>Player.seekToNext()</code></a>).</div>
</td>
</tr>
<tr id="i54" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetDeviceMuted(boolean)">handleSetDeviceMuted</a></span>&#8203;(boolean&nbsp;muted)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setDeviceMuted(boolean)"><code>Player.setDeviceMuted(boolean)</code></a>.</div>
</td>
</tr>
<tr id="i55" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetDeviceVolume(int)">handleSetDeviceVolume</a></span>&#8203;(int&nbsp;deviceVolume)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setDeviceVolume(int)"><code>Player.setDeviceVolume(int)</code></a>.</div>
</td>
</tr>
<tr id="i56" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetMediaItems(java.util.List,int,long)">handleSetMediaItems</a></span>&#8203;(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems,
int&nbsp;startIndex,
long&nbsp;startPositionMs)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setMediaItem(com.google.android.exoplayer2.MediaItem)"><code>Player.setMediaItem(com.google.android.exoplayer2.MediaItem)</code></a> and <a href="Player.html#setMediaItems(java.util.List)"><code>Player.setMediaItems(java.util.List&lt;com.google.android.exoplayer2.MediaItem&gt;)</code></a>.</div>
</td>
</tr>
<tr id="i57" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)">handleSetPlaybackParameters</a></span>&#8203;(<a href="PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;playbackParameters)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)"><code>Player.setPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)</code></a> or <a href="Player.html#setPlaybackSpeed(float)"><code>Player.setPlaybackSpeed(float)</code></a>.</div>
</td>
</tr>
<tr id="i58" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)">handleSetPlaylistMetadata</a></span>&#8203;(<a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;playlistMetadata)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)"><code>Player.setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)</code></a>.</div>
</td>
</tr>
<tr id="i59" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetPlayWhenReady(boolean)">handleSetPlayWhenReady</a></span>&#8203;(boolean&nbsp;playWhenReady)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setPlayWhenReady(boolean)"><code>Player.setPlayWhenReady(boolean)</code></a>, <a href="Player.html#play()"><code>Player.play()</code></a> and <a href="Player.html#pause()"><code>Player.pause()</code></a>.</div>
</td>
</tr>
<tr id="i60" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetRepeatMode(@com.google.android.exoplayer2.Player.RepeatModeint)">handleSetRepeatMode</a></span>&#8203;(@com.google.android.exoplayer2.Player.RepeatMode int&nbsp;repeatMode)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setRepeatMode(@com.google.android.exoplayer2.Player.RepeatModeint)"><code>Player.setRepeatMode(@com.google.android.exoplayer2.Player.RepeatMode int)</code></a>.</div>
</td>
</tr>
<tr id="i61" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetShuffleModeEnabled(boolean)">handleSetShuffleModeEnabled</a></span>&#8203;(boolean&nbsp;shuffleModeEnabled)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setShuffleModeEnabled(boolean)"><code>Player.setShuffleModeEnabled(boolean)</code></a>.</div>
</td>
</tr>
<tr id="i62" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">handleSetTrackSelectionParameters</a></span>&#8203;(<a href="trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a>&nbsp;trackSelectionParameters)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)"><code>Player.setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)</code></a>.</div>
</td>
</tr>
<tr id="i63" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetVideoOutput(java.lang.Object)">handleSetVideoOutput</a></span>&#8203;(<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;videoOutput)</code></th>
<td class="colLast">
<div class="block">Handles calls to set the video output.</div>
</td>
</tr>
<tr id="i64" class="altColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleSetVolume(float)">handleSetVolume</a></span>&#8203;(float&nbsp;volume)</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#setVolume(float)"><code>Player.setVolume(float)</code></a>.</div>
</td>
</tr>
<tr id="i65" class="rowColor">
<td class="colFirst"><code>protected <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#handleStop()">handleStop</a></span>()</code></th>
<td class="colLast">
<div class="block">Handles calls to <a href="Player.html#stop()"><code>Player.stop()</code></a>.</div>
</td>
</tr>
<tr id="i66" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#increaseDeviceVolume()">increaseDeviceVolume</a></span>()</code></th>
<td class="colLast">
<div class="block">Increases the volume of the device.</div>
</td>
</tr>
<tr id="i67" class="rowColor">
<td class="colFirst"><code>protected void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#invalidateState()">invalidateState</a></span>()</code></th>
<td class="colLast">
<div class="block">Invalidates the current state.</div>
</td>
</tr>
<tr id="i68" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isDeviceMuted()">isDeviceMuted</a></span>()</code></th>
<td class="colLast">
<div class="block">Gets whether the device is muted or not.</div>
</td>
</tr>
<tr id="i69" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isLoading()">isLoading</a></span>()</code></th>
<td class="colLast">
<div class="block">Whether the player is currently loading the source.</div>
</td>
</tr>
<tr id="i70" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#isPlayingAd()">isPlayingAd</a></span>()</code></th>
<td class="colLast">
<div class="block">Returns whether the player is currently playing an ad.</div>
</td>
</tr>
<tr id="i71" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#moveMediaItems(int,int,int)">moveMediaItems</a></span>&#8203;(int&nbsp;fromIndex,
int&nbsp;toIndex,
int&nbsp;newIndex)</code></th>
<td class="colLast">
<div class="block">Moves the media item range to the new index.</div>
</td>
</tr>
<tr id="i72" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#prepare()">prepare</a></span>()</code></th>
<td class="colLast">
<div class="block">Prepares the player.</div>
</td>
</tr>
<tr id="i73" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#release()">release</a></span>()</code></th>
<td class="colLast">
<div class="block">Releases the player.</div>
</td>
</tr>
<tr id="i74" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removeListener(com.google.android.exoplayer2.Player.Listener)">removeListener</a></span>&#8203;(<a href="Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a>&nbsp;listener)</code></th>
<td class="colLast">
<div class="block">Unregister a listener registered through <a href="Player.html#addListener(com.google.android.exoplayer2.Player.Listener)"><code>Player.addListener(Listener)</code></a>.</div>
</td>
</tr>
<tr id="i75" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#removeMediaItems(int,int)">removeMediaItems</a></span>&#8203;(int&nbsp;fromIndex,
int&nbsp;toIndex)</code></th>
<td class="colLast">
<div class="block">Removes a range of media items from the playlist.</div>
</td>
</tr>
<tr id="i76" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#seekTo(int,long,@com.google.android.exoplayer2.Player.Commandint,boolean)">seekTo</a></span>&#8203;(int&nbsp;mediaItemIndex,
long&nbsp;positionMs,
@com.google.android.exoplayer2.Player.Command int&nbsp;seekCommand,
boolean&nbsp;isRepeatingCurrentItem)</code></th>
<td class="colLast">
<div class="block">Seeks to a position in the specified <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a>.</div>
</td>
</tr>
<tr id="i77" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDeviceMuted(boolean)">setDeviceMuted</a></span>&#8203;(boolean&nbsp;muted)</code></th>
<td class="colLast">
<div class="block">Sets the mute state of the device.</div>
</td>
</tr>
<tr id="i78" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setDeviceVolume(int)">setDeviceVolume</a></span>&#8203;(int&nbsp;volume)</code></th>
<td class="colLast">
<div class="block">Sets the volume of the device.</div>
</td>
</tr>
<tr id="i79" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setMediaItems(java.util.List,boolean)">setMediaItems</a></span>&#8203;(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems,
boolean&nbsp;resetPosition)</code></th>
<td class="colLast">
<div class="block">Clears the playlist and adds the specified <a href="MediaItem.html" title="class in com.google.android.exoplayer2">media items</a>.</div>
</td>
</tr>
<tr id="i80" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setMediaItems(java.util.List,int,long)">setMediaItems</a></span>&#8203;(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems,
int&nbsp;startIndex,
long&nbsp;startPositionMs)</code></th>
<td class="colLast">
<div class="block">Clears the playlist and adds the specified <a href="MediaItem.html" title="class in com.google.android.exoplayer2">media items</a>.</div>
</td>
</tr>
<tr id="i81" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)">setPlaybackParameters</a></span>&#8203;(<a href="PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;playbackParameters)</code></th>
<td class="colLast">
<div class="block">Attempts to set the playback parameters.</div>
</td>
</tr>
<tr id="i82" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)">setPlaylistMetadata</a></span>&#8203;(<a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;mediaMetadata)</code></th>
<td class="colLast">
<div class="block">Sets the playlist <a href="MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>.</div>
</td>
</tr>
<tr id="i83" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setPlayWhenReady(boolean)">setPlayWhenReady</a></span>&#8203;(boolean&nbsp;playWhenReady)</code></th>
<td class="colLast">
<div class="block">Sets whether playback should proceed when <a href="Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> == <a href="Player.html#STATE_READY"><code>Player.STATE_READY</code></a>.</div>
</td>
</tr>
<tr id="i84" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setRepeatMode(@com.google.android.exoplayer2.Player.RepeatModeint)">setRepeatMode</a></span>&#8203;(@com.google.android.exoplayer2.Player.RepeatMode int&nbsp;repeatMode)</code></th>
<td class="colLast">
<div class="block">Sets the <a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2"><code>Player.RepeatMode</code></a> to be used for playback.</div>
</td>
</tr>
<tr id="i85" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setShuffleModeEnabled(boolean)">setShuffleModeEnabled</a></span>&#8203;(boolean&nbsp;shuffleModeEnabled)</code></th>
<td class="colLast">
<div class="block">Sets whether shuffling of media items is enabled.</div>
</td>
</tr>
<tr id="i86" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">setTrackSelectionParameters</a></span>&#8203;(<a href="trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a>&nbsp;parameters)</code></th>
<td class="colLast">
<div class="block">Sets the parameters constraining the track selection.</div>
</td>
</tr>
<tr id="i87" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setVideoSurface(android.view.Surface)">setVideoSurface</a></span>&#8203;(<a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top">Surface</a>&nbsp;surface)</code></th>
<td class="colLast">
<div class="block">Sets the <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a> onto which video will be rendered.</div>
</td>
</tr>
<tr id="i88" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setVideoSurfaceHolder(android.view.SurfaceHolder)">setVideoSurfaceHolder</a></span>&#8203;(<a href="https://developer.android.com/reference/android/view/SurfaceHolder.html" title="class or interface in android.view" class="externalLink" target="_top">SurfaceHolder</a>&nbsp;surfaceHolder)</code></th>
<td class="colLast">
<div class="block">Sets the <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a> that holds the <a href="https://developer.android.com/reference/android/view/Surface.html?is-external=true" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a> onto which video will be
rendered.</div>
</td>
</tr>
<tr id="i89" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setVideoSurfaceView(android.view.SurfaceView)">setVideoSurfaceView</a></span>&#8203;(<a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink" target="_top">SurfaceView</a>&nbsp;surfaceView)</code></th>
<td class="colLast">
<div class="block">Sets the <a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink" target="_top"><code>SurfaceView</code></a> onto which video will be rendered.</div>
</td>
</tr>
<tr id="i90" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setVideoTextureView(android.view.TextureView)">setVideoTextureView</a></span>&#8203;(<a href="https://developer.android.com/reference/android/view/TextureView.html" title="class or interface in android.view" class="externalLink" target="_top">TextureView</a>&nbsp;textureView)</code></th>
<td class="colLast">
<div class="block">Sets the <a href="https://developer.android.com/reference/android/view/TextureView.html" title="class or interface in android.view" class="externalLink" target="_top"><code>TextureView</code></a> onto which video will be rendered.</div>
</td>
</tr>
<tr id="i91" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setVolume(float)">setVolume</a></span>&#8203;(float&nbsp;volume)</code></th>
<td class="colLast">
<div class="block">Sets the audio volume, valid values are between 0 (silence) and 1 (unity gain, signal
unchanged), inclusive.</div>
</td>
</tr>
<tr id="i92" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop()">stop</a></span>()</code></th>
<td class="colLast">
<div class="block">Stops playback without resetting the playlist.</div>
</td>
</tr>
<tr id="i93" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#stop(boolean)">stop</a></span>&#8203;(boolean&nbsp;reset)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.BasePlayer">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;com.google.android.exoplayer2.<a href="BasePlayer.html" title="class in com.google.android.exoplayer2">BasePlayer</a></h3>
<code><a href="BasePlayer.html#addMediaItem(int,com.google.android.exoplayer2.MediaItem)">addMediaItem</a>, <a href="BasePlayer.html#addMediaItem(com.google.android.exoplayer2.MediaItem)">addMediaItem</a>, <a href="BasePlayer.html#addMediaItems(java.util.List)">addMediaItems</a>, <a href="BasePlayer.html#canAdvertiseSession()">canAdvertiseSession</a>, <a href="BasePlayer.html#clearMediaItems()">clearMediaItems</a>, <a href="BasePlayer.html#getBufferedPercentage()">getBufferedPercentage</a>, <a href="BasePlayer.html#getContentDuration()">getContentDuration</a>, <a href="BasePlayer.html#getCurrentLiveOffset()">getCurrentLiveOffset</a>, <a href="BasePlayer.html#getCurrentManifest()">getCurrentManifest</a>, <a href="BasePlayer.html#getCurrentMediaItem()">getCurrentMediaItem</a>, <a href="BasePlayer.html#getCurrentWindowIndex()">getCurrentWindowIndex</a>, <a href="BasePlayer.html#getMediaItemAt(int)">getMediaItemAt</a>, <a href="BasePlayer.html#getMediaItemCount()">getMediaItemCount</a>, <a href="BasePlayer.html#getNextMediaItemIndex()">getNextMediaItemIndex</a>, <a href="BasePlayer.html#getNextWindowIndex()">getNextWindowIndex</a>, <a href="BasePlayer.html#getPreviousMediaItemIndex()">getPreviousMediaItemIndex</a>, <a href="BasePlayer.html#getPreviousWindowIndex()">getPreviousWindowIndex</a>, <a href="BasePlayer.html#hasNext()">hasNext</a>, <a href="BasePlayer.html#hasNextMediaItem()">hasNextMediaItem</a>, <a href="BasePlayer.html#hasNextWindow()">hasNextWindow</a>, <a href="BasePlayer.html#hasPrevious()">hasPrevious</a>, <a href="BasePlayer.html#hasPreviousMediaItem()">hasPreviousMediaItem</a>, <a href="BasePlayer.html#hasPreviousWindow()">hasPreviousWindow</a>, <a href="BasePlayer.html#isCommandAvailable(@com.google.android.exoplayer2.Player.Commandint)">isCommandAvailable</a>, <a href="BasePlayer.html#isCurrentMediaItemDynamic()">isCurrentMediaItemDynamic</a>, <a href="BasePlayer.html#isCurrentMediaItemLive()">isCurrentMediaItemLive</a>, <a href="BasePlayer.html#isCurrentMediaItemSeekable()">isCurrentMediaItemSeekable</a>, <a href="BasePlayer.html#isCurrentWindowDynamic()">isCurrentWindowDynamic</a>, <a href="BasePlayer.html#isCurrentWindowLive()">isCurrentWindowLive</a>, <a href="BasePlayer.html#isCurrentWindowSeekable()">isCurrentWindowSeekable</a>, <a href="BasePlayer.html#isPlaying()">isPlaying</a>, <a href="BasePlayer.html#moveMediaItem(int,int)">moveMediaItem</a>, <a href="BasePlayer.html#next()">next</a>, <a href="BasePlayer.html#pause()">pause</a>, <a href="BasePlayer.html#play()">play</a>, <a href="BasePlayer.html#previous()">previous</a>, <a href="BasePlayer.html#removeMediaItem(int)">removeMediaItem</a>, <a href="BasePlayer.html#seekBack()">seekBack</a>, <a href="BasePlayer.html#seekForward()">seekForward</a>, <a href="BasePlayer.html#seekTo(int,long)">seekTo</a>, <a href="BasePlayer.html#seekTo(long)">seekTo</a>, <a href="BasePlayer.html#seekToDefaultPosition()">seekToDefaultPosition</a>, <a href="BasePlayer.html#seekToDefaultPosition(int)">seekToDefaultPosition</a>, <a href="BasePlayer.html#seekToNext()">seekToNext</a>, <a href="BasePlayer.html#seekToNextMediaItem()">seekToNextMediaItem</a>, <a href="BasePlayer.html#seekToNextWindow()">seekToNextWindow</a>, <a href="BasePlayer.html#seekToPrevious()">seekToPrevious</a>, <a href="BasePlayer.html#seekToPreviousMediaItem()">seekToPreviousMediaItem</a>, <a href="BasePlayer.html#seekToPreviousWindow()">seekToPreviousWindow</a>, <a href="BasePlayer.html#setMediaItem(com.google.android.exoplayer2.MediaItem)">setMediaItem</a>, <a href="BasePlayer.html#setMediaItem(com.google.android.exoplayer2.MediaItem,boolean)">setMediaItem</a>, <a href="BasePlayer.html#setMediaItem(com.google.android.exoplayer2.MediaItem,long)">setMediaItem</a>, <a href="BasePlayer.html#setMediaItems(java.util.List)">setMediaItems</a>, <a href="BasePlayer.html#setPlaybackSpeed(float)">setPlaybackSpeed</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a></h3>
<code><a href="https://developer.android.com/reference/java/lang/Object.html#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://developer.android.com/reference/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink" target="_top">wait</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;(android.os.Looper)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>SimpleBasePlayer</h4>
<pre>protected&nbsp;SimpleBasePlayer&#8203;(<a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top">Looper</a>&nbsp;applicationLooper)</pre>
<div class="block">Creates the base class.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>applicationLooper</code> - The <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> that must be used for all calls to the player and
that is used to call listeners on.</dd>
</dl>
</li>
</ul>
<a id="&lt;init&gt;(android.os.Looper,com.google.android.exoplayer2.util.Clock)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>SimpleBasePlayer</h4>
<pre>protected&nbsp;SimpleBasePlayer&#8203;(<a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top">Looper</a>&nbsp;applicationLooper,
<a href="util/Clock.html" title="interface in com.google.android.exoplayer2.util">Clock</a>&nbsp;clock)</pre>
<div class="block">Creates the base class.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>applicationLooper</code> - The <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> that must be used for all calls to the player and
that is used to call listeners on.</dd>
<dd><code>clock</code> - The <a href="util/Clock.html" title="interface in com.google.android.exoplayer2.util"><code>Clock</code></a> that will be used by the player.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="addListener(com.google.android.exoplayer2.Player.Listener)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addListener</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;addListener&#8203;(<a href="Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a>&nbsp;listener)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#addListener(com.google.android.exoplayer2.Player.Listener)">Player</a></code></span></div>
<div class="block">Registers a listener to receive all events from the player.
<p>The listener's methods will be called on the thread associated with <a href="Player.html#getApplicationLooper()"><code>Player.getApplicationLooper()</code></a>.
<p>This method can be called from any thread.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>listener</code> - The listener to register.</dd>
</dl>
</li>
</ul>
<a id="removeListener(com.google.android.exoplayer2.Player.Listener)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeListener</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;removeListener&#8203;(<a href="Player.Listener.html" title="interface in com.google.android.exoplayer2">Player.Listener</a>&nbsp;listener)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#removeListener(com.google.android.exoplayer2.Player.Listener)">Player</a></code></span></div>
<div class="block">Unregister a listener registered through <a href="Player.html#addListener(com.google.android.exoplayer2.Player.Listener)"><code>Player.addListener(Listener)</code></a>. The listener will no
longer receive events.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>listener</code> - The listener to unregister.</dd>
</dl>
</li>
</ul>
<a id="getApplicationLooper()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getApplicationLooper</h4>
<pre class="methodSignature">public final&nbsp;<a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top">Looper</a>&nbsp;getApplicationLooper()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getApplicationLooper()">Player</a></code></span></div>
<div class="block">Returns the <a href="https://developer.android.com/reference/android/os/Looper.html" title="class or interface in android.os" class="externalLink" target="_top"><code>Looper</code></a> associated with the application thread that's used to access the
player and on which player events are received.
<p>This method can be called from any thread.</div>
</li>
</ul>
<a id="getAvailableCommands()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAvailableCommands</h4>
<pre class="methodSignature">public final&nbsp;<a href="Player.Commands.html" title="class in com.google.android.exoplayer2">Player.Commands</a>&nbsp;getAvailableCommands()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getAvailableCommands()">Player</a></code></span></div>
<div class="block">Returns the player's currently available <a href="Player.Commands.html" title="class in com.google.android.exoplayer2"><code>Player.Commands</code></a>.
<p>The returned <a href="Player.Commands.html" title="class in com.google.android.exoplayer2"><code>Player.Commands</code></a> are not updated when available commands change. Use <a href="Player.Listener.html#onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)"><code>Player.Listener.onAvailableCommandsChanged(Commands)</code></a> to get an update when the available commands
change.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The currently available <a href="Player.Commands.html" title="class in com.google.android.exoplayer2"><code>Player.Commands</code></a>.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)"><code>Player.Listener.onAvailableCommandsChanged(com.google.android.exoplayer2.Player.Commands)</code></a></dd>
</dl>
</li>
</ul>
<a id="setPlayWhenReady(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setPlayWhenReady</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setPlayWhenReady&#8203;(boolean&nbsp;playWhenReady)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setPlayWhenReady(boolean)">Player</a></code></span></div>
<div class="block">Sets whether playback should proceed when <a href="Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> == <a href="Player.html#STATE_READY"><code>Player.STATE_READY</code></a>.
<p>If the player is already in the ready state then this method pauses and resumes playback.
<p>This method must only be called if <a href="Player.html#COMMAND_PLAY_PAUSE"><code>Player.COMMAND_PLAY_PAUSE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>playWhenReady</code> - Whether playback should proceed when ready.</dd>
</dl>
</li>
</ul>
<a id="getPlayWhenReady()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlayWhenReady</h4>
<pre class="methodSignature">public final&nbsp;boolean&nbsp;getPlayWhenReady()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getPlayWhenReady()">Player</a></code></span></div>
<div class="block">Whether playback will proceed when <a href="Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> == <a href="Player.html#STATE_READY"><code>Player.STATE_READY</code></a>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Whether playback will proceed when ready.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onPlayWhenReadyChanged(boolean,@com.google.android.exoplayer2.Player.PlayWhenReadyChangeReasonint)"><code>Player.Listener.onPlayWhenReadyChanged(boolean, int)</code></a></dd>
</dl>
</li>
</ul>
<a id="setMediaItems(java.util.List,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setMediaItems</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setMediaItems&#8203;(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems,
boolean&nbsp;resetPosition)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setMediaItems(java.util.List,boolean)">Player</a></code></span></div>
<div class="block">Clears the playlist and adds the specified <a href="MediaItem.html" title="class in com.google.android.exoplayer2">media items</a>.
<p>This method must only be called if <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaItems</code> - The new <a href="MediaItem.html" title="class in com.google.android.exoplayer2">media items</a>.</dd>
<dd><code>resetPosition</code> - Whether the playback position should be reset to the default position in
the first <a href="Timeline.Window.html" title="class in com.google.android.exoplayer2"><code>Timeline.Window</code></a>. If false, playback will start from the position defined
by <a href="Player.html#getCurrentMediaItemIndex()"><code>Player.getCurrentMediaItemIndex()</code></a> and <a href="Player.html#getCurrentPosition()"><code>Player.getCurrentPosition()</code></a>.</dd>
</dl>
</li>
</ul>
<a id="setMediaItems(java.util.List,int,long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setMediaItems</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setMediaItems&#8203;(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems,
int&nbsp;startIndex,
long&nbsp;startPositionMs)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setMediaItems(java.util.List,int,long)">Player</a></code></span></div>
<div class="block">Clears the playlist and adds the specified <a href="MediaItem.html" title="class in com.google.android.exoplayer2">media items</a>.
<p>This method must only be called if <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaItems</code> - The new <a href="MediaItem.html" title="class in com.google.android.exoplayer2">media items</a>.</dd>
<dd><code>startIndex</code> - The <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> index to start playback from. If <a href="C.html#INDEX_UNSET"><code>C.INDEX_UNSET</code></a>
is passed, the current position is not reset.</dd>
<dd><code>startPositionMs</code> - The position in milliseconds to start playback from. If <a href="C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> is passed, the default position of the given <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> is used. In
any case, if <code>startIndex</code> is set to <a href="C.html#INDEX_UNSET"><code>C.INDEX_UNSET</code></a>, this parameter is ignored
and the position is not reset at all.</dd>
</dl>
</li>
</ul>
<a id="addMediaItems(int,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>addMediaItems</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;addMediaItems&#8203;(int&nbsp;index,
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#addMediaItems(int,java.util.List)">Player</a></code></span></div>
<div class="block">Adds a list of media items at the given index of the playlist.
<p>This method must only be called if <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - The index at which to add the media items. If the index is larger than the size of
the playlist, the media items are added to the end of the playlist.</dd>
<dd><code>mediaItems</code> - The <a href="MediaItem.html" title="class in com.google.android.exoplayer2">media items</a> to add.</dd>
</dl>
</li>
</ul>
<a id="moveMediaItems(int,int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>moveMediaItems</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;moveMediaItems&#8203;(int&nbsp;fromIndex,
int&nbsp;toIndex,
int&nbsp;newIndex)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#moveMediaItems(int,int,int)">Player</a></code></span></div>
<div class="block">Moves the media item range to the new index.
<p>This method must only be called if <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fromIndex</code> - The start of the range to move. If the index is larger than the size of the
playlist, the request is ignored.</dd>
<dd><code>toIndex</code> - The first item not to be included in the range (exclusive). If the index is
larger than the size of the playlist, items up to the end of the playlist are moved.</dd>
<dd><code>newIndex</code> - The new index of the first media item of the range. If the new index is larger
than the size of the remaining playlist after removing the range, the range is moved to the
end of the playlist.</dd>
</dl>
</li>
</ul>
<a id="removeMediaItems(int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>removeMediaItems</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;removeMediaItems&#8203;(int&nbsp;fromIndex,
int&nbsp;toIndex)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#removeMediaItems(int,int)">Player</a></code></span></div>
<div class="block">Removes a range of media items from the playlist.
<p>This method must only be called if <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fromIndex</code> - The index at which to start removing media items. If the index is larger than
the size of the playlist, the request is ignored.</dd>
<dd><code>toIndex</code> - The index of the first item to be kept (exclusive). If the index is larger than
the size of the playlist, media items up to the end of the playlist are removed.</dd>
</dl>
</li>
</ul>
<a id="prepare()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>prepare</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;prepare()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#prepare()">Player</a></code></span></div>
<div class="block">Prepares the player.
<p>This method must only be called if <a href="Player.html#COMMAND_PREPARE"><code>Player.COMMAND_PREPARE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.
<p>This will move the player out of <a href="Player.html#STATE_IDLE"><code>idle state</code></a> and the player will start
loading media and acquire resources needed for playback.</div>
</li>
</ul>
<a id="getPlaybackState()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlaybackState</h4>
<pre class="methodSignature"><a href="Player.State.html" title="annotation in com.google.android.exoplayer2">@State</a>
public final&nbsp;@com.google.android.exoplayer2.Player.State int&nbsp;getPlaybackState()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getPlaybackState()">Player</a></code></span></div>
<div class="block">Returns the current <a href="Player.State.html" title="annotation in com.google.android.exoplayer2">playback state</a> of the player.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The current <a href="Player.State.html" title="annotation in com.google.android.exoplayer2">playback state</a>.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onPlaybackStateChanged(@com.google.android.exoplayer2.Player.Stateint)"><code>Player.Listener.onPlaybackStateChanged(int)</code></a></dd>
</dl>
</li>
</ul>
<a id="getPlaybackSuppressionReason()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlaybackSuppressionReason</h4>
<pre class="methodSignature">public final&nbsp;int&nbsp;getPlaybackSuppressionReason()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getPlaybackSuppressionReason()">Player</a></code></span></div>
<div class="block">Returns the reason why playback is suppressed even though <a href="Player.html#getPlayWhenReady()"><code>Player.getPlayWhenReady()</code></a> is <code>
true</code>, or <a href="Player.html#PLAYBACK_SUPPRESSION_REASON_NONE"><code>Player.PLAYBACK_SUPPRESSION_REASON_NONE</code></a> if playback is not suppressed.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The current <a href="Player.PlaybackSuppressionReason.html" title="annotation in com.google.android.exoplayer2"><code>Player.PlaybackSuppressionReason</code></a>.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onPlaybackSuppressionReasonChanged(@com.google.android.exoplayer2.Player.PlaybackSuppressionReasonint)"><code>Player.Listener.onPlaybackSuppressionReasonChanged(int)</code></a></dd>
</dl>
</li>
</ul>
<a id="getPlayerError()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlayerError</h4>
<pre class="methodSignature">@Nullable
public final&nbsp;<a href="PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;getPlayerError()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getPlayerError()">Player</a></code></span></div>
<div class="block">Returns the error that caused playback to fail. This is the same error that will have been
reported via <a href="Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)"><code>Player.Listener.onPlayerError(PlaybackException)</code></a> at the time of failure. It can
be queried using this method until the player is re-prepared.
<p>Note that this method will always return <code>null</code> if <a href="Player.html#getPlaybackState()"><code>Player.getPlaybackState()</code></a> is not
<a href="Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The error, or <code>null</code>.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)"><code>Player.Listener.onPlayerError(PlaybackException)</code></a></dd>
</dl>
</li>
</ul>
<a id="setRepeatMode(@com.google.android.exoplayer2.Player.RepeatModeint)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setRepeatMode</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setRepeatMode&#8203;(<a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2">@RepeatMode</a>
@com.google.android.exoplayer2.Player.RepeatMode int&nbsp;repeatMode)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setRepeatMode(@com.google.android.exoplayer2.Player.RepeatModeint)">Player</a></code></span></div>
<div class="block">Sets the <a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2"><code>Player.RepeatMode</code></a> to be used for playback.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_REPEAT_MODE"><code>Player.COMMAND_SET_REPEAT_MODE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>repeatMode</code> - The repeat mode.</dd>
</dl>
</li>
</ul>
<a id="getRepeatMode()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRepeatMode</h4>
<pre class="methodSignature"><a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2">@RepeatMode</a>
public final&nbsp;@com.google.android.exoplayer2.Player.RepeatMode int&nbsp;getRepeatMode()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getRepeatMode()">Player</a></code></span></div>
<div class="block">Returns the current <a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2"><code>Player.RepeatMode</code></a> used for playback.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The current repeat mode.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onRepeatModeChanged(@com.google.android.exoplayer2.Player.RepeatModeint)"><code>Player.Listener.onRepeatModeChanged(int)</code></a></dd>
</dl>
</li>
</ul>
<a id="setShuffleModeEnabled(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setShuffleModeEnabled</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setShuffleModeEnabled&#8203;(boolean&nbsp;shuffleModeEnabled)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setShuffleModeEnabled(boolean)">Player</a></code></span></div>
<div class="block">Sets whether shuffling of media items is enabled.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_SHUFFLE_MODE"><code>Player.COMMAND_SET_SHUFFLE_MODE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>shuffleModeEnabled</code> - Whether shuffling is enabled.</dd>
</dl>
</li>
</ul>
<a id="getShuffleModeEnabled()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getShuffleModeEnabled</h4>
<pre class="methodSignature">public final&nbsp;boolean&nbsp;getShuffleModeEnabled()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getShuffleModeEnabled()">Player</a></code></span></div>
<div class="block">Returns whether shuffling of media items is enabled.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onShuffleModeEnabledChanged(boolean)"><code>Player.Listener.onShuffleModeEnabledChanged(boolean)</code></a></dd>
</dl>
</li>
</ul>
<a id="isLoading()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isLoading</h4>
<pre class="methodSignature">public final&nbsp;boolean&nbsp;isLoading()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#isLoading()">Player</a></code></span></div>
<div class="block">Whether the player is currently loading the source.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Whether the player is currently loading the source.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onIsLoadingChanged(boolean)"><code>Player.Listener.onIsLoadingChanged(boolean)</code></a></dd>
</dl>
</li>
</ul>
<a id="seekTo(int,long,@com.google.android.exoplayer2.Player.Commandint,boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>seekTo</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;seekTo&#8203;(int&nbsp;mediaItemIndex,
long&nbsp;positionMs,
<a href="Player.Command.html" title="annotation in com.google.android.exoplayer2">@Command</a>
@com.google.android.exoplayer2.Player.Command int&nbsp;seekCommand,
boolean&nbsp;isRepeatingCurrentItem)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="BasePlayer.html#seekTo(int,long,@com.google.android.exoplayer2.Player.Commandint,boolean)">BasePlayer</a></code></span></div>
<div class="block">Seeks to a position in the specified <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="BasePlayer.html#seekTo(int,long,@com.google.android.exoplayer2.Player.Commandint,boolean)">seekTo</a></code>&nbsp;in class&nbsp;<code><a href="BasePlayer.html" title="class in com.google.android.exoplayer2">BasePlayer</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaItemIndex</code> - The index of the <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a>.</dd>
<dd><code>positionMs</code> - The seek position in the specified <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> in milliseconds, or
<a href="C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> to seek to the media item's default position.</dd>
<dd><code>seekCommand</code> - The <a href="Player.Command.html" title="annotation in com.google.android.exoplayer2"><code>Player.Command</code></a> used to trigger the seek.</dd>
<dd><code>isRepeatingCurrentItem</code> - Whether this seeks repeats the current item.</dd>
</dl>
</li>
</ul>
<a id="getSeekBackIncrement()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSeekBackIncrement</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getSeekBackIncrement()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getSeekBackIncrement()">Player</a></code></span></div>
<div class="block">Returns the <a href="Player.html#seekBack()"><code>Player.seekBack()</code></a> increment.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The seek back increment, in milliseconds.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onSeekBackIncrementChanged(long)"><code>Player.Listener.onSeekBackIncrementChanged(long)</code></a></dd>
</dl>
</li>
</ul>
<a id="getSeekForwardIncrement()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSeekForwardIncrement</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getSeekForwardIncrement()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getSeekForwardIncrement()">Player</a></code></span></div>
<div class="block">Returns the <a href="Player.html#seekForward()"><code>Player.seekForward()</code></a> increment.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The seek forward increment, in milliseconds.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onSeekForwardIncrementChanged(long)"><code>Player.Listener.onSeekForwardIncrementChanged(long)</code></a></dd>
</dl>
</li>
</ul>
<a id="getMaxSeekToPreviousPosition()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMaxSeekToPreviousPosition</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getMaxSeekToPreviousPosition()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getMaxSeekToPreviousPosition()">Player</a></code></span></div>
<div class="block">Returns the maximum position for which <a href="Player.html#seekToPrevious()"><code>Player.seekToPrevious()</code></a> seeks to the previous <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a>, in milliseconds.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The maximum seek to previous position, in milliseconds.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onMaxSeekToPreviousPositionChanged(long)"><code>Player.Listener.onMaxSeekToPreviousPositionChanged(long)</code></a></dd>
</dl>
</li>
</ul>
<a id="setPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setPlaybackParameters</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setPlaybackParameters&#8203;(<a href="PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;playbackParameters)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)">Player</a></code></span></div>
<div class="block">Attempts to set the playback parameters. Passing <a href="PlaybackParameters.html#DEFAULT"><code>PlaybackParameters.DEFAULT</code></a> resets the
player to the default, which means there is no speed or pitch adjustment.
<p>Playback parameters changes may cause the player to buffer. <a href="Player.Listener.html#onPlaybackParametersChanged(com.google.android.exoplayer2.PlaybackParameters)"><code>Player.Listener.onPlaybackParametersChanged(PlaybackParameters)</code></a> will be called whenever the currently
active playback parameters change.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_SPEED_AND_PITCH"><code>Player.COMMAND_SET_SPEED_AND_PITCH</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>playbackParameters</code> - The playback parameters.</dd>
</dl>
</li>
</ul>
<a id="getPlaybackParameters()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlaybackParameters</h4>
<pre class="methodSignature">public final&nbsp;<a href="PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;getPlaybackParameters()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getPlaybackParameters()">Player</a></code></span></div>
<div class="block">Returns the currently active playback parameters.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onPlaybackParametersChanged(com.google.android.exoplayer2.PlaybackParameters)"><code>Player.Listener.onPlaybackParametersChanged(PlaybackParameters)</code></a></dd>
</dl>
</li>
</ul>
<a id="stop()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;stop()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#stop()">Player</a></code></span></div>
<div class="block">Stops playback without resetting the playlist. Use <a href="Player.html#pause()"><code>Player.pause()</code></a> rather than this method if
the intention is to pause playback.
<p>Calling this method will cause the playback state to transition to <a href="Player.html#STATE_IDLE"><code>Player.STATE_IDLE</code></a> and
the player will release the loaded media and resources required for playback. The player
instance can still be used by calling <a href="Player.html#prepare()"><code>Player.prepare()</code></a> again, and <a href="Player.html#release()"><code>Player.release()</code></a> must
still be called on the player if it's no longer required.
<p>Calling this method does not clear the playlist, reset the playback position or the playback
error.
<p>This method must only be called if <a href="Player.html#COMMAND_STOP"><code>Player.COMMAND_STOP</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="stop(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;stop&#8203;(boolean&nbsp;reset)</pre>
</li>
</ul>
<a id="release()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>release</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;release()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#release()">Player</a></code></span></div>
<div class="block">Releases the player. This method must be called when the player is no longer required. The
player must not be used after calling this method.</div>
</li>
</ul>
<a id="getCurrentTracks()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentTracks</h4>
<pre class="methodSignature">public final&nbsp;<a href="Tracks.html" title="class in com.google.android.exoplayer2">Tracks</a>&nbsp;getCurrentTracks()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getCurrentTracks()">Player</a></code></span></div>
<div class="block">Returns the current tracks.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_TRACKS"><code>Player.COMMAND_GET_TRACKS</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onTracksChanged(com.google.android.exoplayer2.Tracks)"><code>Player.Listener.onTracksChanged(Tracks)</code></a></dd>
</dl>
</li>
</ul>
<a id="getTrackSelectionParameters()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTrackSelectionParameters</h4>
<pre class="methodSignature">public final&nbsp;<a href="trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a>&nbsp;getTrackSelectionParameters()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getTrackSelectionParameters()">Player</a></code></span></div>
<div class="block">Returns the parameters constraining the track selection.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onTrackSelectionParametersChanged(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)"><code>}</code></a></dd>
</dl>
</li>
</ul>
<a id="setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setTrackSelectionParameters</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setTrackSelectionParameters&#8203;(<a href="trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a>&nbsp;parameters)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">Player</a></code></span></div>
<div class="block">Sets the parameters constraining the track selection.
<p>Unsupported parameters will be silently ignored.
<p>Use <a href="Player.html#getTrackSelectionParameters()"><code>Player.getTrackSelectionParameters()</code></a> to retrieve the current parameters. For example,
the following snippet restricts video to SD whilst keep other track selection parameters
unchanged:
<pre><code>
player.setTrackSelectionParameters(
player.getTrackSelectionParameters()
.buildUpon()
.setMaxVideoSizeSd()
.build())
</code></pre>
<p>This method must only be called if <a href="Player.html#COMMAND_SET_TRACK_SELECTION_PARAMETERS"><code>Player.COMMAND_SET_TRACK_SELECTION_PARAMETERS</code></a> is
<a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getMediaMetadata()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMediaMetadata</h4>
<pre class="methodSignature">public final&nbsp;<a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;getMediaMetadata()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getMediaMetadata()">Player</a></code></span></div>
<div class="block">Returns the current combined <a href="MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>, or <a href="MediaMetadata.html#EMPTY"><code>MediaMetadata.EMPTY</code></a> if not
supported.
<p>This <a href="MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a> is a combination of the <a href="MediaItem.html#mediaMetadata"><code>MediaItem
metadata</code></a>, the static metadata in the media's <a href="Format.html#metadata"><code>Format</code></a>, and any timed
metadata that has been parsed from the media and output via <a href="Player.Listener.html#onMetadata(com.google.android.exoplayer2.metadata.Metadata)"><code>Player.Listener.onMetadata(Metadata)</code></a>. If a field is populated in the <a href="MediaItem.html#mediaMetadata"><code>MediaItem.mediaMetadata</code></a>,
it will be prioritised above the same field coming from static or timed metadata.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_MEDIA_ITEMS_METADATA"><code>Player.COMMAND_GET_MEDIA_ITEMS_METADATA</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getPlaylistMetadata()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlaylistMetadata</h4>
<pre class="methodSignature">public final&nbsp;<a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;getPlaylistMetadata()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getPlaylistMetadata()">Player</a></code></span></div>
<div class="block">Returns the playlist <a href="MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>, as set by <a href="Player.html#setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)"><code>Player.setPlaylistMetadata(MediaMetadata)</code></a>, or <a href="MediaMetadata.html#EMPTY"><code>MediaMetadata.EMPTY</code></a> if not supported.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_MEDIA_ITEMS_METADATA"><code>Player.COMMAND_GET_MEDIA_ITEMS_METADATA</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setPlaylistMetadata</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setPlaylistMetadata&#8203;(<a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;mediaMetadata)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)">Player</a></code></span></div>
<div class="block">Sets the playlist <a href="MediaMetadata.html" title="class in com.google.android.exoplayer2"><code>MediaMetadata</code></a>.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_MEDIA_ITEMS_METADATA"><code>Player.COMMAND_SET_MEDIA_ITEMS_METADATA</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getCurrentTimeline()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentTimeline</h4>
<pre class="methodSignature">public final&nbsp;<a href="Timeline.html" title="class in com.google.android.exoplayer2">Timeline</a>&nbsp;getCurrentTimeline()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getCurrentTimeline()">Player</a></code></span></div>
<div class="block">Returns the current <a href="Timeline.html" title="class in com.google.android.exoplayer2"><code>Timeline</code></a>. Never null, but may be empty.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_TIMELINE"><code>Player.COMMAND_GET_TIMELINE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onTimelineChanged(com.google.android.exoplayer2.Timeline,@com.google.android.exoplayer2.Player.TimelineChangeReasonint)"><code>Player.Listener.onTimelineChanged(Timeline, int)</code></a></dd>
</dl>
</li>
</ul>
<a id="getCurrentPeriodIndex()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentPeriodIndex</h4>
<pre class="methodSignature">public final&nbsp;int&nbsp;getCurrentPeriodIndex()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getCurrentPeriodIndex()">Player</a></code></span></div>
<div class="block">Returns the index of the period currently being played.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_TIMELINE"><code>Player.COMMAND_GET_TIMELINE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getCurrentMediaItemIndex()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentMediaItemIndex</h4>
<pre class="methodSignature">public final&nbsp;int&nbsp;getCurrentMediaItemIndex()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getCurrentMediaItemIndex()">Player</a></code></span></div>
<div class="block">Returns the index of the current <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> in the <a href="Player.html#getCurrentTimeline()"><code>timeline</code></a>, or the prospective index if the <a href="Player.html#getCurrentTimeline()"><code>current timeline</code></a> is
empty.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_TIMELINE"><code>Player.COMMAND_GET_TIMELINE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getDuration()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDuration</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getDuration()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getDuration()">Player</a></code></span></div>
<div class="block">Returns the duration of the current content or ad in milliseconds, or <a href="C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> if
the duration is not known.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getCurrentPosition()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentPosition</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getCurrentPosition()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getCurrentPosition()">Player</a></code></span></div>
<div class="block">Returns the playback position in the current content or ad, in milliseconds, or the prospective
position in milliseconds if the <a href="Player.html#getCurrentTimeline()"><code>current timeline</code></a> is empty.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getBufferedPosition()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getBufferedPosition</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getBufferedPosition()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getBufferedPosition()">Player</a></code></span></div>
<div class="block">Returns an estimate of the position in the current content or ad up to which data is buffered,
in milliseconds.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getTotalBufferedDuration()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getTotalBufferedDuration</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getTotalBufferedDuration()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getTotalBufferedDuration()">Player</a></code></span></div>
<div class="block">Returns an estimate of the total buffered duration from the current position, in milliseconds.
This includes pre-buffered data for subsequent ads and <a href="MediaItem.html" title="class in com.google.android.exoplayer2">media items</a>.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="isPlayingAd()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isPlayingAd</h4>
<pre class="methodSignature">public final&nbsp;boolean&nbsp;isPlayingAd()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#isPlayingAd()">Player</a></code></span></div>
<div class="block">Returns whether the player is currently playing an ad.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getCurrentAdGroupIndex()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentAdGroupIndex</h4>
<pre class="methodSignature">public final&nbsp;int&nbsp;getCurrentAdGroupIndex()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getCurrentAdGroupIndex()">Player</a></code></span></div>
<div class="block">If <a href="Player.html#isPlayingAd()"><code>Player.isPlayingAd()</code></a> returns true, returns the index of the ad group in the period
currently being played. Returns <a href="C.html#INDEX_UNSET"><code>C.INDEX_UNSET</code></a> otherwise.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getCurrentAdIndexInAdGroup()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentAdIndexInAdGroup</h4>
<pre class="methodSignature">public final&nbsp;int&nbsp;getCurrentAdIndexInAdGroup()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getCurrentAdIndexInAdGroup()">Player</a></code></span></div>
<div class="block">If <a href="Player.html#isPlayingAd()"><code>Player.isPlayingAd()</code></a> returns true, returns the index of the ad in its ad group. Returns
<a href="C.html#INDEX_UNSET"><code>C.INDEX_UNSET</code></a> otherwise.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getContentPosition()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getContentPosition</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getContentPosition()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getContentPosition()">Player</a></code></span></div>
<div class="block">If <a href="Player.html#isPlayingAd()"><code>Player.isPlayingAd()</code></a> returns <code>true</code>, returns the content position that will be
played once all ads in the ad group have finished playing, in milliseconds. If there is no ad
playing, the returned position is the same as that returned by <a href="Player.html#getCurrentPosition()"><code>Player.getCurrentPosition()</code></a>.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getContentBufferedPosition()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getContentBufferedPosition</h4>
<pre class="methodSignature">public final&nbsp;long&nbsp;getContentBufferedPosition()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getContentBufferedPosition()">Player</a></code></span></div>
<div class="block">If <a href="Player.html#isPlayingAd()"><code>Player.isPlayingAd()</code></a> returns <code>true</code>, returns an estimate of the content position in
the current content up to which data is buffered, in milliseconds. If there is no ad playing,
the returned position is the same as that returned by <a href="Player.html#getBufferedPosition()"><code>Player.getBufferedPosition()</code></a>.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_CURRENT_MEDIA_ITEM"><code>Player.COMMAND_GET_CURRENT_MEDIA_ITEM</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getAudioAttributes()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getAudioAttributes</h4>
<pre class="methodSignature">public final&nbsp;<a href="audio/AudioAttributes.html" title="class in com.google.android.exoplayer2.audio">AudioAttributes</a>&nbsp;getAudioAttributes()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getAudioAttributes()">Player</a></code></span></div>
<div class="block">Returns the attributes for audio playback.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_AUDIO_ATTRIBUTES"><code>Player.COMMAND_GET_AUDIO_ATTRIBUTES</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="setVolume(float)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setVolume</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setVolume&#8203;(float&nbsp;volume)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setVolume(float)">Player</a></code></span></div>
<div class="block">Sets the audio volume, valid values are between 0 (silence) and 1 (unity gain, signal
unchanged), inclusive.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VOLUME"><code>Player.COMMAND_SET_VOLUME</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>volume</code> - Linear output gain to apply to all audio channels.</dd>
</dl>
</li>
</ul>
<a id="getVolume()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getVolume</h4>
<pre class="methodSignature">public final&nbsp;float&nbsp;getVolume()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getVolume()">Player</a></code></span></div>
<div class="block">Returns the audio volume, with 0 being silence and 1 being unity gain (signal unchanged).
<p>This method must only be called if <a href="Player.html#COMMAND_GET_VOLUME"><code>Player.COMMAND_GET_VOLUME</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The linear gain applied to all audio channels.</dd>
</dl>
</li>
</ul>
<a id="setVideoSurface(android.view.Surface)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setVideoSurface</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setVideoSurface&#8203;(@Nullable
<a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top">Surface</a>&nbsp;surface)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setVideoSurface(android.view.Surface)">Player</a></code></span></div>
<div class="block">Sets the <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a> onto which video will be rendered. The caller is responsible for
tracking the lifecycle of the surface, and must clear the surface by calling <code>
setVideoSurface(null)</code> if the surface is destroyed.
<p>If the surface is held by a <a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink"><code>SurfaceView</code></a>, <a href="https://developer.android.com/reference/android/view/TextureView.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>TextureView</code></a> or <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a> then it's recommended to use <a href="Player.html#setVideoSurfaceView(android.view.SurfaceView)"><code>Player.setVideoSurfaceView(SurfaceView)</code></a>, <a href="Player.html#setVideoTextureView(android.view.TextureView)"><code>Player.setVideoTextureView(TextureView)</code></a> or <a href="Player.html#setVideoSurfaceHolder(android.view.SurfaceHolder)" target="_top"><code>Player.setVideoSurfaceHolder(SurfaceHolder)</code></a> rather than
this method, since passing the holder allows the player to track the lifecycle of the surface
automatically.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>surface</code> - The <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a>.</dd>
</dl>
</li>
</ul>
<a id="setVideoSurfaceHolder(android.view.SurfaceHolder)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setVideoSurfaceHolder</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setVideoSurfaceHolder&#8203;(@Nullable
<a href="https://developer.android.com/reference/android/view/SurfaceHolder.html" title="class or interface in android.view" class="externalLink" target="_top">SurfaceHolder</a>&nbsp;surfaceHolder)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setVideoSurfaceHolder(android.view.SurfaceHolder)">Player</a></code></span></div>
<div class="block">Sets the <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a> that holds the <a href="https://developer.android.com/reference/android/view/Surface.html?is-external=true" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a> onto which video will be
rendered. The player will track the lifecycle of the surface automatically.
<p>The thread that calls the <a href="https://developer.android.com/reference/android/view/SurfaceHolder.Callback.html" title="class or interface in android.view" class="externalLink" target="_top"><code>SurfaceHolder.Callback</code></a> methods must be the thread
associated with <a href="Player.html#getApplicationLooper()"><code>Player.getApplicationLooper()</code></a>.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>surfaceHolder</code> - The surface holder.</dd>
</dl>
</li>
</ul>
<a id="setVideoSurfaceView(android.view.SurfaceView)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setVideoSurfaceView</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setVideoSurfaceView&#8203;(@Nullable
<a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink" target="_top">SurfaceView</a>&nbsp;surfaceView)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setVideoSurfaceView(android.view.SurfaceView)">Player</a></code></span></div>
<div class="block">Sets the <a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink" target="_top"><code>SurfaceView</code></a> onto which video will be rendered. The player will track the
lifecycle of the surface automatically.
<p>The thread that calls the <a href="https://developer.android.com/reference/android/view/SurfaceHolder.Callback.html" title="class or interface in android.view" class="externalLink" target="_top"><code>SurfaceHolder.Callback</code></a> methods must be the thread
associated with <a href="Player.html#getApplicationLooper()"><code>Player.getApplicationLooper()</code></a>.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>surfaceView</code> - The surface view.</dd>
</dl>
</li>
</ul>
<a id="setVideoTextureView(android.view.TextureView)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setVideoTextureView</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setVideoTextureView&#8203;(@Nullable
<a href="https://developer.android.com/reference/android/view/TextureView.html" title="class or interface in android.view" class="externalLink" target="_top">TextureView</a>&nbsp;textureView)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setVideoTextureView(android.view.TextureView)">Player</a></code></span></div>
<div class="block">Sets the <a href="https://developer.android.com/reference/android/view/TextureView.html" title="class or interface in android.view" class="externalLink" target="_top"><code>TextureView</code></a> onto which video will be rendered. The player will track the
lifecycle of the surface automatically.
<p>The thread that calls the <a href="https://developer.android.com/reference/android/view/TextureView.SurfaceTextureListener.html" title="class or interface in android.view" class="externalLink" target="_top"><code>TextureView.SurfaceTextureListener</code></a> methods must be the
thread associated with <a href="Player.html#getApplicationLooper()"><code>Player.getApplicationLooper()</code></a>.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>textureView</code> - The texture view.</dd>
</dl>
</li>
</ul>
<a id="clearVideoSurface()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clearVideoSurface</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;clearVideoSurface()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#clearVideoSurface()">Player</a></code></span></div>
<div class="block">Clears any <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink"><code>Surface</code></a>, <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a>, <a href="https://developer.android.com/reference/android/view/SurfaceView.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>SurfaceView</code></a> or <a href="https://developer.android.com/reference/android/view/TextureView.html?is-external=true" title="class or interface in android.view" class="externalLink" target="_top"><code>TextureView</code></a>
currently set on the player.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="clearVideoSurface(android.view.Surface)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clearVideoSurface</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;clearVideoSurface&#8203;(@Nullable
<a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top">Surface</a>&nbsp;surface)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#clearVideoSurface(android.view.Surface)">Player</a></code></span></div>
<div class="block">Clears the <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a> onto which video is being rendered if it matches the one passed.
Else does nothing.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>surface</code> - The surface to clear.</dd>
</dl>
</li>
</ul>
<a id="clearVideoSurfaceHolder(android.view.SurfaceHolder)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clearVideoSurfaceHolder</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;clearVideoSurfaceHolder&#8203;(@Nullable
<a href="https://developer.android.com/reference/android/view/SurfaceHolder.html" title="class or interface in android.view" class="externalLink" target="_top">SurfaceHolder</a>&nbsp;surfaceHolder)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#clearVideoSurfaceHolder(android.view.SurfaceHolder)">Player</a></code></span></div>
<div class="block">Clears the <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a> that holds the <a href="https://developer.android.com/reference/android/view/Surface.html?is-external=true" title="class or interface in android.view" class="externalLink" target="_top"><code>Surface</code></a> onto which video is being
rendered if it matches the one passed. Else does nothing.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>surfaceHolder</code> - The surface holder to clear.</dd>
</dl>
</li>
</ul>
<a id="clearVideoSurfaceView(android.view.SurfaceView)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clearVideoSurfaceView</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;clearVideoSurfaceView&#8203;(@Nullable
<a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink" target="_top">SurfaceView</a>&nbsp;surfaceView)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#clearVideoSurfaceView(android.view.SurfaceView)">Player</a></code></span></div>
<div class="block">Clears the <a href="https://developer.android.com/reference/android/view/SurfaceView.html" title="class or interface in android.view" class="externalLink" target="_top"><code>SurfaceView</code></a> onto which video is being rendered if it matches the one passed.
Else does nothing.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>surfaceView</code> - The texture view to clear.</dd>
</dl>
</li>
</ul>
<a id="clearVideoTextureView(android.view.TextureView)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>clearVideoTextureView</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;clearVideoTextureView&#8203;(@Nullable
<a href="https://developer.android.com/reference/android/view/TextureView.html" title="class or interface in android.view" class="externalLink" target="_top">TextureView</a>&nbsp;textureView)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#clearVideoTextureView(android.view.TextureView)">Player</a></code></span></div>
<div class="block">Clears the <a href="https://developer.android.com/reference/android/view/TextureView.html" title="class or interface in android.view" class="externalLink" target="_top"><code>TextureView</code></a> onto which video is being rendered if it matches the one passed.
Else does nothing.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>textureView</code> - The texture view to clear.</dd>
</dl>
</li>
</ul>
<a id="getVideoSize()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getVideoSize</h4>
<pre class="methodSignature">public final&nbsp;<a href="video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;getVideoSize()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getVideoSize()">Player</a></code></span></div>
<div class="block">Gets the size of the video.
<p>The video's width and height are <code>0</code> if there is no video or its size has not been
determined yet.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onVideoSizeChanged(com.google.android.exoplayer2.video.VideoSize)"><code>Player.Listener.onVideoSizeChanged(VideoSize)</code></a></dd>
</dl>
</li>
</ul>
<a id="getSurfaceSize()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getSurfaceSize</h4>
<pre class="methodSignature">public final&nbsp;<a href="util/Size.html" title="class in com.google.android.exoplayer2.util">Size</a>&nbsp;getSurfaceSize()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getSurfaceSize()">Player</a></code></span></div>
<div class="block">Gets the size of the surface on which the video is rendered.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="Player.Listener.html#onSurfaceSizeChanged(int,int)"><code>Player.Listener.onSurfaceSizeChanged(int, int)</code></a></dd>
</dl>
</li>
</ul>
<a id="getCurrentCues()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentCues</h4>
<pre class="methodSignature">public final&nbsp;<a href="text/CueGroup.html" title="class in com.google.android.exoplayer2.text">CueGroup</a>&nbsp;getCurrentCues()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getCurrentCues()">Player</a></code></span></div>
<div class="block">Returns the current <a href="text/CueGroup.html" title="class in com.google.android.exoplayer2.text"><code>CueGroup</code></a>.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_TEXT"><code>Player.COMMAND_GET_TEXT</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="getDeviceInfo()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDeviceInfo</h4>
<pre class="methodSignature">public final&nbsp;<a href="DeviceInfo.html" title="class in com.google.android.exoplayer2">DeviceInfo</a>&nbsp;getDeviceInfo()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getDeviceInfo()">Player</a></code></span></div>
<div class="block">Gets the device information.</div>
</li>
</ul>
<a id="getDeviceVolume()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getDeviceVolume</h4>
<pre class="methodSignature">public final&nbsp;int&nbsp;getDeviceVolume()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#getDeviceVolume()">Player</a></code></span></div>
<div class="block">Gets the current volume of the device.
<p>For devices with <a href="DeviceInfo.html#PLAYBACK_TYPE_LOCAL"><code>local playback</code></a>, the volume returned
by this method varies according to the current <a href="C.StreamType.html" title="annotation in com.google.android.exoplayer2"><code>stream type</code></a>. The stream
type is determined by <a href="audio/AudioAttributes.html#usage"><code>AudioAttributes.usage</code></a> which can be converted to stream type with
<a href="util/Util.html#getStreamTypeForAudioUsage(@com.google.android.exoplayer2.C.AudioUsageint)"><code>Util.getStreamTypeForAudioUsage(int)</code></a>.
<p>For devices with <a href="DeviceInfo.html#PLAYBACK_TYPE_REMOTE"><code>remote playback</code></a>, the volume of the
remote device is returned.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_DEVICE_VOLUME"><code>Player.COMMAND_GET_DEVICE_VOLUME</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="isDeviceMuted()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isDeviceMuted</h4>
<pre class="methodSignature">public final&nbsp;boolean&nbsp;isDeviceMuted()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#isDeviceMuted()">Player</a></code></span></div>
<div class="block">Gets whether the device is muted or not.
<p>This method must only be called if <a href="Player.html#COMMAND_GET_DEVICE_VOLUME"><code>Player.COMMAND_GET_DEVICE_VOLUME</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="setDeviceVolume(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setDeviceVolume</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setDeviceVolume&#8203;(int&nbsp;volume)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setDeviceVolume(int)">Player</a></code></span></div>
<div class="block">Sets the volume of the device.
<p>This method must only be called if <a href="Player.html#COMMAND_SET_DEVICE_VOLUME"><code>Player.COMMAND_SET_DEVICE_VOLUME</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>volume</code> - The volume to set.</dd>
</dl>
</li>
</ul>
<a id="increaseDeviceVolume()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>increaseDeviceVolume</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;increaseDeviceVolume()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#increaseDeviceVolume()">Player</a></code></span></div>
<div class="block">Increases the volume of the device.
<p>This method must only be called if <a href="Player.html#COMMAND_ADJUST_DEVICE_VOLUME"><code>Player.COMMAND_ADJUST_DEVICE_VOLUME</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="decreaseDeviceVolume()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>decreaseDeviceVolume</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;decreaseDeviceVolume()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#decreaseDeviceVolume()">Player</a></code></span></div>
<div class="block">Decreases the volume of the device.
<p>This method must only be called if <a href="Player.html#COMMAND_ADJUST_DEVICE_VOLUME"><code>Player.COMMAND_ADJUST_DEVICE_VOLUME</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="setDeviceMuted(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setDeviceMuted</h4>
<pre class="methodSignature">public final&nbsp;void&nbsp;setDeviceMuted&#8203;(boolean&nbsp;muted)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="Player.html#setDeviceMuted(boolean)">Player</a></code></span></div>
<div class="block">Sets the mute state of the device.
<p>This method must only be called if <a href="Player.html#COMMAND_ADJUST_DEVICE_VOLUME"><code>Player.COMMAND_ADJUST_DEVICE_VOLUME</code></a> is <a href="Player.html#getAvailableCommands()">available</a>.</div>
</li>
</ul>
<a id="invalidateState()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>invalidateState</h4>
<pre class="methodSignature">protected final&nbsp;void&nbsp;invalidateState()</pre>
<div class="block">Invalidates the current state.
<p>Triggers a call to <a href="#getState()"><code>getState()</code></a> and informs listeners if the state changed.
<p>Note that this may not have an immediate effect while there are still player methods being
handled asynchronously. The state will be invalidated automatically once these pending
synchronous operations are finished and there is no need to call this method again.</div>
</li>
</ul>
<a id="getState()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
<pre class="methodSignature">@ForOverride
protected abstract&nbsp;<a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.State</a>&nbsp;getState()</pre>
<div class="block">Returns the current <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a> of the player.
<p>The <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a> should include all <a href="SimpleBasePlayer.State.Builder.html#setAvailableCommands(com.google.android.exoplayer2.Player.Commands)">available commands</a> indicating which player
methods are allowed to be called.
<p>Note that this method won't be called while asynchronous handling of player methods is in
progress. This means that the implementation doesn't need to handle state changes caused by
these asynchronous operations until they are done and can return the currently known state
directly. The placeholder state used while these asynchronous operations are in progress can be
customized by overriding <a href="#getPlaceholderState(com.google.android.exoplayer2.SimpleBasePlayer.State)"><code>getPlaceholderState(State)</code></a> if required.</div>
</li>
</ul>
<a id="getPlaceholderState(com.google.android.exoplayer2.SimpleBasePlayer.State)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlaceholderState</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.State</a>&nbsp;getPlaceholderState&#8203;(<a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.State</a>&nbsp;suggestedPlaceholderState)</pre>
<div class="block">Returns the placeholder state used while a player method is handled asynchronously.
<p>The <code>suggestedPlaceholderState</code> already contains the most likely state update, for
example setting <a href="SimpleBasePlayer.State.html#playWhenReady"><code>SimpleBasePlayer.State.playWhenReady</code></a> to true if <code>player.setPlayWhenReady(true)</code> is
called, and an implementations only needs to override this method if it can determine a more
accurate placeholder state.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>suggestedPlaceholderState</code> - The suggested placeholder <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>, including the most
likely outcome of handling all pending asynchronous operations.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The placeholder <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a> to use while asynchronous operations are pending.</dd>
</dl>
</li>
</ul>
<a id="getPlaceholderMediaItemData(com.google.android.exoplayer2.MediaItem)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getPlaceholderMediaItemData</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="SimpleBasePlayer.MediaItemData.html" title="class in com.google.android.exoplayer2">SimpleBasePlayer.MediaItemData</a>&nbsp;getPlaceholderMediaItemData&#8203;(<a href="MediaItem.html" title="class in com.google.android.exoplayer2">MediaItem</a>&nbsp;mediaItem)</pre>
<div class="block">Returns the placeholder <a href="SimpleBasePlayer.MediaItemData.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.MediaItemData</code></a> used for a new <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> added to the
playlist.
<p>An implementation only needs to override this method if it can determine a more accurate
placeholder state than the default.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaItem</code> - The <a href="MediaItem.html" title="class in com.google.android.exoplayer2"><code>MediaItem</code></a> added to the playlist.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The <a href="SimpleBasePlayer.MediaItemData.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.MediaItemData</code></a> used as placeholder while adding the item to the playlist is
in progress.</dd>
</dl>
</li>
</ul>
<a id="handleSetPlayWhenReady(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetPlayWhenReady</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetPlayWhenReady&#8203;(boolean&nbsp;playWhenReady)</pre>
<div class="block">Handles calls to <a href="Player.html#setPlayWhenReady(boolean)"><code>Player.setPlayWhenReady(boolean)</code></a>, <a href="Player.html#play()"><code>Player.play()</code></a> and <a href="Player.html#pause()"><code>Player.pause()</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_PLAY_PAUSE"><code>Player.COMMAND_PLAY_PAUSE</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>playWhenReady</code> - The requested <a href="SimpleBasePlayer.State.html#playWhenReady"><code>SimpleBasePlayer.State.playWhenReady</code></a></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handlePrepare()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handlePrepare</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handlePrepare()</pre>
<div class="block">Handles calls to <a href="Player.html#prepare()"><code>Player.prepare()</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_PREPARE"><code>Player.COMMAND_PREPARE</code></a> is available.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleStop()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleStop</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleStop()</pre>
<div class="block">Handles calls to <a href="Player.html#stop()"><code>Player.stop()</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_STOP"><code>Player.COMMAND_STOP</code></a> is available.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleRelease()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleRelease</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleRelease()</pre>
<div class="block">Handles calls to <a href="Player.html#release()"><code>Player.release()</code></a>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetRepeatMode(@com.google.android.exoplayer2.Player.RepeatModeint)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetRepeatMode</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetRepeatMode&#8203;(<a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2">@RepeatMode</a>
@com.google.android.exoplayer2.Player.RepeatMode int&nbsp;repeatMode)</pre>
<div class="block">Handles calls to <a href="Player.html#setRepeatMode(@com.google.android.exoplayer2.Player.RepeatModeint)"><code>Player.setRepeatMode(@com.google.android.exoplayer2.Player.RepeatMode int)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_SET_REPEAT_MODE"><code>Player.COMMAND_SET_REPEAT_MODE</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>repeatMode</code> - The requested <a href="Player.RepeatMode.html" title="annotation in com.google.android.exoplayer2"><code>Player.RepeatMode</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetShuffleModeEnabled(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetShuffleModeEnabled</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetShuffleModeEnabled&#8203;(boolean&nbsp;shuffleModeEnabled)</pre>
<div class="block">Handles calls to <a href="Player.html#setShuffleModeEnabled(boolean)"><code>Player.setShuffleModeEnabled(boolean)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_SET_SHUFFLE_MODE"><code>Player.COMMAND_SET_SHUFFLE_MODE</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>shuffleModeEnabled</code> - Whether shuffle mode was requested to be enabled.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetPlaybackParameters</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetPlaybackParameters&#8203;(<a href="PlaybackParameters.html" title="class in com.google.android.exoplayer2">PlaybackParameters</a>&nbsp;playbackParameters)</pre>
<div class="block">Handles calls to <a href="Player.html#setPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)"><code>Player.setPlaybackParameters(com.google.android.exoplayer2.PlaybackParameters)</code></a> or <a href="Player.html#setPlaybackSpeed(float)"><code>Player.setPlaybackSpeed(float)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_SET_SPEED_AND_PITCH"><code>Player.COMMAND_SET_SPEED_AND_PITCH</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>playbackParameters</code> - The requested <a href="PlaybackParameters.html" title="class in com.google.android.exoplayer2"><code>PlaybackParameters</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetTrackSelectionParameters</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetTrackSelectionParameters&#8203;(<a href="trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection">TrackSelectionParameters</a>&nbsp;trackSelectionParameters)</pre>
<div class="block">Handles calls to <a href="Player.html#setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)"><code>Player.setTrackSelectionParameters(com.google.android.exoplayer2.trackselection.TrackSelectionParameters)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_SET_TRACK_SELECTION_PARAMETERS"><code>Player.COMMAND_SET_TRACK_SELECTION_PARAMETERS</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>trackSelectionParameters</code> - The requested <a href="trackselection/TrackSelectionParameters.html" title="class in com.google.android.exoplayer2.trackselection"><code>TrackSelectionParameters</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetPlaylistMetadata</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetPlaylistMetadata&#8203;(<a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">MediaMetadata</a>&nbsp;playlistMetadata)</pre>
<div class="block">Handles calls to <a href="Player.html#setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)"><code>Player.setPlaylistMetadata(com.google.android.exoplayer2.MediaMetadata)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_SET_MEDIA_ITEMS_METADATA"><code>Player.COMMAND_SET_MEDIA_ITEMS_METADATA</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>playlistMetadata</code> - The requested <a href="MediaMetadata.html" title="class in com.google.android.exoplayer2">playlist metadata</a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetVolume(float)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetVolume</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetVolume&#8203;(@FloatRange(from=0.0,to=1.0)
float&nbsp;volume)</pre>
<div class="block">Handles calls to <a href="Player.html#setVolume(float)"><code>Player.setVolume(float)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_SET_VOLUME"><code>Player.COMMAND_SET_VOLUME</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>volume</code> - The requested audio volume, with 0 being silence and 1 being unity gain (signal
unchanged).</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetDeviceVolume(int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetDeviceVolume</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetDeviceVolume&#8203;(@IntRange(from=0L)
int&nbsp;deviceVolume)</pre>
<div class="block">Handles calls to <a href="Player.html#setDeviceVolume(int)"><code>Player.setDeviceVolume(int)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_SET_DEVICE_VOLUME"><code>Player.COMMAND_SET_DEVICE_VOLUME</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>deviceVolume</code> - The requested device volume.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleIncreaseDeviceVolume()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleIncreaseDeviceVolume</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleIncreaseDeviceVolume()</pre>
<div class="block">Handles calls to <a href="Player.html#increaseDeviceVolume()"><code>Player.increaseDeviceVolume()</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_ADJUST_DEVICE_VOLUME"><code>Player.COMMAND_ADJUST_DEVICE_VOLUME</code></a> is available.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleDecreaseDeviceVolume()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleDecreaseDeviceVolume</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleDecreaseDeviceVolume()</pre>
<div class="block">Handles calls to <a href="Player.html#decreaseDeviceVolume()"><code>Player.decreaseDeviceVolume()</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_ADJUST_DEVICE_VOLUME"><code>Player.COMMAND_ADJUST_DEVICE_VOLUME</code></a> is available.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetDeviceMuted(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetDeviceMuted</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetDeviceMuted&#8203;(boolean&nbsp;muted)</pre>
<div class="block">Handles calls to <a href="Player.html#setDeviceMuted(boolean)"><code>Player.setDeviceMuted(boolean)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_ADJUST_DEVICE_VOLUME"><code>Player.COMMAND_ADJUST_DEVICE_VOLUME</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>muted</code> - Whether the device was requested to be muted.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetVideoOutput(java.lang.Object)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetVideoOutput</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetVideoOutput&#8203;(<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;videoOutput)</pre>
<div class="block">Handles calls to set the video output.
<p>Will only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>videoOutput</code> - The requested video output. This is either a <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink"><code>Surface</code></a>, <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a>, <a href="https://developer.android.com/reference/android/view/TextureView.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>TextureView</code></a> or <a href="https://developer.android.com/reference/android/view/SurfaceView.html?is-external=true" title="class or interface in android.view" class="externalLink" target="_top"><code>SurfaceView</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleClearVideoOutput(java.lang.Object)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleClearVideoOutput</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleClearVideoOutput&#8203;(@Nullable
<a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>&nbsp;videoOutput)</pre>
<div class="block">Handles calls to clear the video output.
<p>Will only be called if <a href="Player.html#COMMAND_SET_VIDEO_SURFACE"><code>Player.COMMAND_SET_VIDEO_SURFACE</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>videoOutput</code> - The video output to clear. If null any current output should be cleared. If
non-null, the output should only be cleared if it matches the provided argument. This is
either a <a href="https://developer.android.com/reference/android/view/Surface.html" title="class or interface in android.view" class="externalLink"><code>Surface</code></a>, <a href="https://developer.android.com/reference/android/view/SurfaceHolder.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>SurfaceHolder</code></a>, <a href="https://developer.android.com/reference/android/view/TextureView.html?is-external=true" title="class or interface in android.view" class="externalLink"><code>TextureView</code></a> or <a href="https://developer.android.com/reference/android/view/SurfaceView.html?is-external=true" title="class or interface in android.view" class="externalLink" target="_top"><code>SurfaceView</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSetMediaItems(java.util.List,int,long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleSetMediaItems</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSetMediaItems&#8203;(<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems,
int&nbsp;startIndex,
long&nbsp;startPositionMs)</pre>
<div class="block">Handles calls to <a href="Player.html#setMediaItem(com.google.android.exoplayer2.MediaItem)"><code>Player.setMediaItem(com.google.android.exoplayer2.MediaItem)</code></a> and <a href="Player.html#setMediaItems(java.util.List)"><code>Player.setMediaItems(java.util.List&lt;com.google.android.exoplayer2.MediaItem&gt;)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_SET_MEDIA_ITEM"><code>Player.COMMAND_SET_MEDIA_ITEM</code></a> or <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is available. If only <a href="Player.html#COMMAND_SET_MEDIA_ITEM"><code>Player.COMMAND_SET_MEDIA_ITEM</code></a>
is available, the list of media items will always contain exactly one item.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaItems</code> - The media items to add.</dd>
<dd><code>startIndex</code> - The index at which to start playback from, or <a href="C.html#INDEX_UNSET"><code>C.INDEX_UNSET</code></a> to start
at the default item.</dd>
<dd><code>startPositionMs</code> - The position in milliseconds to start playback from, or <a href="C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a> to start at the default position in the media item.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleAddMediaItems(int,java.util.List)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleAddMediaItems</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleAddMediaItems&#8203;(int&nbsp;index,
<a href="https://developer.android.com/reference/java/util/List.html" title="class or interface in java.util" class="externalLink">List</a>&lt;<a href="MediaItem.html" title="class in com.google.android.exoplayer2" target="_top">MediaItem</a>&gt;&nbsp;mediaItems)</pre>
<div class="block">Handles calls to <a href="Player.html#addMediaItem(com.google.android.exoplayer2.MediaItem)"><code>Player.addMediaItem(com.google.android.exoplayer2.MediaItem)</code></a> and <a href="Player.html#addMediaItems(java.util.List)"><code>Player.addMediaItems(java.util.List&lt;com.google.android.exoplayer2.MediaItem&gt;)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>index</code> - The index at which to add the items. The index is in the range 0 &lt;= <code>
index</code> &lt;= <a href="BasePlayer.html#getMediaItemCount()"><code>BasePlayer.getMediaItemCount()</code></a>.</dd>
<dd><code>mediaItems</code> - The media items to add.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleMoveMediaItems(int,int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleMoveMediaItems</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleMoveMediaItems&#8203;(int&nbsp;fromIndex,
int&nbsp;toIndex,
int&nbsp;newIndex)</pre>
<div class="block">Handles calls to <a href="Player.html#moveMediaItem(int,int)"><code>Player.moveMediaItem(int, int)</code></a> and <a href="Player.html#moveMediaItems(int,int,int)"><code>Player.moveMediaItems(int, int, int)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fromIndex</code> - The start index of the items to move. The index is in the range 0 &lt;= <code>
fromIndex</code> &lt; <a href="BasePlayer.html#getMediaItemCount()"><code>BasePlayer.getMediaItemCount()</code></a>.</dd>
<dd><code>toIndex</code> - The index of the first item not to be included in the move (exclusive). The
index is in the range <code>fromIndex</code> &lt; <code>toIndex</code> &lt;= <a href="BasePlayer.html#getMediaItemCount()"><code>BasePlayer.getMediaItemCount()</code></a>.</dd>
<dd><code>newIndex</code> - The new index of the first moved item. The index is in the range <code>0</code>
&lt;= <code>newIndex</code> &lt; <a href="BasePlayer.html#getMediaItemCount()"><code>- (toIndex - fromIndex)</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleRemoveMediaItems(int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>handleRemoveMediaItems</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleRemoveMediaItems&#8203;(int&nbsp;fromIndex,
int&nbsp;toIndex)</pre>
<div class="block">Handles calls to <a href="Player.html#removeMediaItem(int)"><code>Player.removeMediaItem(int)</code></a> and <a href="Player.html#removeMediaItems(int,int)"><code>Player.removeMediaItems(int, int)</code></a>.
<p>Will only be called if <a href="Player.html#COMMAND_CHANGE_MEDIA_ITEMS"><code>Player.COMMAND_CHANGE_MEDIA_ITEMS</code></a> is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>fromIndex</code> - The index at which to start removing media items. The index is in the range 0
&lt;= <code>fromIndex</code> &lt; <a href="BasePlayer.html#getMediaItemCount()"><code>BasePlayer.getMediaItemCount()</code></a>.</dd>
<dd><code>toIndex</code> - The index of the first item to be kept (exclusive). The index is in the range
<code>fromIndex</code> &lt; <code>toIndex</code> &lt;= <a href="BasePlayer.html#getMediaItemCount()"><code>BasePlayer.getMediaItemCount()</code></a>.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
<a id="handleSeek(int,long,@com.google.android.exoplayer2.Player.Commandint)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>handleSeek</h4>
<pre class="methodSignature">@ForOverride
protected&nbsp;<a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink">ListenableFuture</a>&lt;?&gt;&nbsp;handleSeek&#8203;(int&nbsp;mediaItemIndex,
long&nbsp;positionMs,
<a href="Player.Command.html" title="annotation in com.google.android.exoplayer2">@Command</a>
@com.google.android.exoplayer2.Player.Command int&nbsp;seekCommand)</pre>
<div class="block">Handles calls to <a href="Player.html#seekTo(long)"><code>Player.seekTo(long)</code></a> and other seek operations (for example, <a href="Player.html#seekToNext()"><code>Player.seekToNext()</code></a>).
<p>Will only be called if the appropriate <a href="Player.Command.html" title="annotation in com.google.android.exoplayer2"><code>Player.Command</code></a>, for example <a href="Player.html#COMMAND_SEEK_TO_MEDIA_ITEM"><code>Player.COMMAND_SEEK_TO_MEDIA_ITEM</code></a> or <a href="Player.html#COMMAND_SEEK_TO_NEXT"><code>Player.COMMAND_SEEK_TO_NEXT</code></a>, is available.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>mediaItemIndex</code> - The media item index to seek to. The index is in the range 0 &lt;= <code>
mediaItemIndex</code> &lt; <code>mediaItems.size()</code>.</dd>
<dd><code>positionMs</code> - The position in milliseconds to start playback from, or <a href="C.html#TIME_UNSET"><code>C.TIME_UNSET</code></a>
to start at the default position in the media item.</dd>
<dd><code>seekCommand</code> - The <a href="Player.Command.html" title="annotation in com.google.android.exoplayer2"><code>Player.Command</code></a> used to trigger the seek.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>A <a href="https://guava.dev/releases/31.0.1-android/api/docs/com/google/common/util/concurrent/ListenableFuture.html?is-external=true" title="class or interface in com.google.common.util.concurrent" class="externalLink"><code>ListenableFuture</code></a> indicating the completion of all immediate <a href="SimpleBasePlayer.State.html" title="class in com.google.android.exoplayer2"><code>SimpleBasePlayer.State</code></a>
changes caused by this call.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
</footer>
</body>
</html>