1<!DOCTYPE HTML>
2<!-- NewPage -->
3<html lang="en">
4<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 -->
5<title>MediaMetricsListener (ExoPlayer library)</title>
6<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
8<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
9<script type="text/javascript" src="../../../../../script.js"></script>
10<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
11<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
12<!--[if IE]>
13<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
14<![endif]-->
15<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
16<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
17</head>
18<body>
19<script type="text/javascript"><!--
20    try {
21        if (location.href.indexOf('is-external=true') == -1) {
22            parent.document.title="MediaMetricsListener (ExoPlayer library)";
23        }
24    }
25    catch(err) {
26    }
27//-->
28var data = {"i0":9,"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};
29var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
30var altColor = "altColor";
31var rowColor = "rowColor";
32var tableTab = "tableTab";
33var activeTableTab = "activeTableTab";
34var pathtoroot = "../../../../../";
35var useModuleDirectories = false;
36loadScripts(document, 'script');</script>
37<noscript>
38<div>JavaScript is disabled on your browser.</div>
39</noscript>
40<header role="banner">
41<nav role="navigation">
42<div class="fixedNav">
43<!-- ========= START OF TOP NAVBAR ======= -->
44<div class="topNav"><a id="navbar.top">
45<!--   -->
46</a>
47<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
48<a id="navbar.top.firstrow">
49<!--   -->
50</a>
51<ul class="navList" title="Navigation">
52<li><a href="../../../../../index.html">Overview</a></li>
53<li><a href="package-summary.html">Package</a></li>
54<li class="navBarCell1Rev">Class</li>
55<li><a href="package-tree.html">Tree</a></li>
56<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
57<li><a href="../../../../../index-all.html">Index</a></li>
58<li><a href="../../../../../help-doc.html">Help</a></li>
59</ul>
60</div>
61<div class="subNav">
62<ul class="navList" id="allclasses_navbar_top">
63<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
64</ul>
65<ul class="navListSearch">
66<li><label for="search">SEARCH:</label>
67<input type="text" id="search" value="search" disabled="disabled">
68<input type="reset" id="reset" value="reset" disabled="disabled">
69</li>
70</ul>
71<div>
72<script type="text/javascript"><!--
73  allClassesLink = document.getElementById("allclasses_navbar_top");
74  if(window==top) {
75    allClassesLink.style.display = "block";
76  }
77  else {
78    allClassesLink.style.display = "none";
79  }
80  //-->
81</script>
82<noscript>
83<div>JavaScript is disabled on your browser.</div>
84</noscript>
85</div>
86<div>
87<ul class="subNavList">
88<li>Summary:&nbsp;</li>
89<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
90<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
91<li>Constr&nbsp;|&nbsp;</li>
92<li><a href="#method.summary">Method</a></li>
93</ul>
94<ul class="subNavList">
95<li>Detail:&nbsp;</li>
96<li>Field&nbsp;|&nbsp;</li>
97<li>Constr&nbsp;|&nbsp;</li>
98<li><a href="#method.detail">Method</a></li>
99</ul>
100</div>
101<a id="skip.navbar.top">
102<!--   -->
103</a></div>
104<!-- ========= END OF TOP NAVBAR ========= -->
105</div>
106<div class="navPadding">&nbsp;</div>
107<script type="text/javascript"><!--
108$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
109//-->
110</script>
111</nav>
112</header>
113<!-- ======== START OF CLASS DATA ======== -->
114<main role="main">
115<div class="header">
116<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">com.google.android.exoplayer2.analytics</a></div>
117<h2 title="Class MediaMetricsListener" class="title">Class MediaMetricsListener</h2>
118</div>
119<div class="contentContainer">
120<ul class="inheritance">
121<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>
122<li>
123<ul class="inheritance">
124<li>com.google.android.exoplayer2.analytics.MediaMetricsListener</li>
125</ul>
126</li>
127</ul>
128<div class="description">
129<ul class="blockList">
130<li class="blockList">
131<dl>
132<dt>All Implemented Interfaces:</dt>
133<dd><code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code>, <code><a href="PlaybackSessionManager.Listener.html" title="interface in com.google.android.exoplayer2.analytics">PlaybackSessionManager.Listener</a></code></dd>
134</dl>
135<hr>
136<pre>@RequiresApi(31)
137public final class <span class="typeNameLabel">MediaMetricsListener</span>
138extends <a href="https://developer.android.com/reference/java/lang/Object.html" title="class or interface in java.lang" class="externalLink" target="_top">Object</a>
139implements <a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a>, <a href="PlaybackSessionManager.Listener.html" title="interface in com.google.android.exoplayer2.analytics">PlaybackSessionManager.Listener</a></pre>
140<div class="block">An <a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics"><code>AnalyticsListener</code></a> that interacts with the Android <a href="https://developer.android.com/reference/android/media/metrics/MediaMetricsManager.html" title="class or interface in android.media.metrics" class="externalLink" target="_top"><code>MediaMetricsManager</code></a>.
141
142 <p>It listens to playback events and forwards them to a <a href="https://developer.android.com/reference/android/media/metrics/PlaybackSession.html" title="class or interface in android.media.metrics" class="externalLink"><code>PlaybackSession</code></a>. The <a href="https://developer.android.com/reference/android/media/metrics/LogSessionId.html?is-external=true" title="class or interface in android.media.metrics" class="externalLink"><code>LogSessionId</code></a> of the playback session can be obtained with <a href="#getLogSessionId()" target="_top"><code>getLogSessionId()</code></a>.</div>
143</li>
144</ul>
145</div>
146<div class="summary">
147<ul class="blockList">
148<li class="blockList">
149<!-- ======== NESTED CLASS SUMMARY ======== -->
150<section role="region">
151<ul class="blockList">
152<li class="blockList"><a id="nested.class.summary">
153<!--   -->
154</a>
155<h3>Nested Class Summary</h3>
156<ul class="blockList">
157<li class="blockList"><a id="nested.classes.inherited.from.class.com.google.android.exoplayer2.analytics.AnalyticsListener">
158<!--   -->
159</a>
160<h3>Nested classes/interfaces inherited from interface&nbsp;com.google.android.exoplayer2.analytics.<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></h3>
161<code><a href="AnalyticsListener.EventFlags.html" title="annotation in com.google.android.exoplayer2.analytics">AnalyticsListener.EventFlags</a>, <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.Events</a>, <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a></code></li>
162</ul>
163</li>
164</ul>
165</section>
166<!-- =========== FIELD SUMMARY =========== -->
167<section role="region">
168<ul class="blockList">
169<li class="blockList"><a id="field.summary">
170<!--   -->
171</a>
172<h3>Field Summary</h3>
173<ul class="blockList">
174<li class="blockList"><a id="fields.inherited.from.class.com.google.android.exoplayer2.analytics.AnalyticsListener">
175<!--   -->
176</a>
177<h3>Fields inherited from interface&nbsp;com.google.android.exoplayer2.analytics.<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></h3>
178<code><a href="AnalyticsListener.html#EVENT_AUDIO_ATTRIBUTES_CHANGED">EVENT_AUDIO_ATTRIBUTES_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_CODEC_ERROR">EVENT_AUDIO_CODEC_ERROR</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_DECODER_INITIALIZED">EVENT_AUDIO_DECODER_INITIALIZED</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_DECODER_RELEASED">EVENT_AUDIO_DECODER_RELEASED</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_DISABLED">EVENT_AUDIO_DISABLED</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_ENABLED">EVENT_AUDIO_ENABLED</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_INPUT_FORMAT_CHANGED">EVENT_AUDIO_INPUT_FORMAT_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_POSITION_ADVANCING">EVENT_AUDIO_POSITION_ADVANCING</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_SESSION_ID">EVENT_AUDIO_SESSION_ID</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_SINK_ERROR">EVENT_AUDIO_SINK_ERROR</a>, <a href="AnalyticsListener.html#EVENT_AUDIO_UNDERRUN">EVENT_AUDIO_UNDERRUN</a>, <a href="AnalyticsListener.html#EVENT_AVAILABLE_COMMANDS_CHANGED">EVENT_AVAILABLE_COMMANDS_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_BANDWIDTH_ESTIMATE">EVENT_BANDWIDTH_ESTIMATE</a>, <a href="AnalyticsListener.html#EVENT_CUES">EVENT_CUES</a>, <a href="AnalyticsListener.html#EVENT_DEVICE_INFO_CHANGED">EVENT_DEVICE_INFO_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_DEVICE_VOLUME_CHANGED">EVENT_DEVICE_VOLUME_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_DOWNSTREAM_FORMAT_CHANGED">EVENT_DOWNSTREAM_FORMAT_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_DRM_KEYS_LOADED">EVENT_DRM_KEYS_LOADED</a>, <a href="AnalyticsListener.html#EVENT_DRM_KEYS_REMOVED">EVENT_DRM_KEYS_REMOVED</a>, <a href="AnalyticsListener.html#EVENT_DRM_KEYS_RESTORED">EVENT_DRM_KEYS_RESTORED</a>, <a href="AnalyticsListener.html#EVENT_DRM_SESSION_ACQUIRED">EVENT_DRM_SESSION_ACQUIRED</a>, <a href="AnalyticsListener.html#EVENT_DRM_SESSION_MANAGER_ERROR">EVENT_DRM_SESSION_MANAGER_ERROR</a>, <a href="AnalyticsListener.html#EVENT_DRM_SESSION_RELEASED">EVENT_DRM_SESSION_RELEASED</a>, <a href="AnalyticsListener.html#EVENT_DROPPED_VIDEO_FRAMES">EVENT_DROPPED_VIDEO_FRAMES</a>, <a href="AnalyticsListener.html#EVENT_IS_LOADING_CHANGED">EVENT_IS_LOADING_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_IS_PLAYING_CHANGED">EVENT_IS_PLAYING_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_LOAD_CANCELED">EVENT_LOAD_CANCELED</a>, <a href="AnalyticsListener.html#EVENT_LOAD_COMPLETED">EVENT_LOAD_COMPLETED</a>, <a href="AnalyticsListener.html#EVENT_LOAD_ERROR">EVENT_LOAD_ERROR</a>, <a href="AnalyticsListener.html#EVENT_LOAD_STARTED">EVENT_LOAD_STARTED</a>, <a href="AnalyticsListener.html#EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED">EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_MEDIA_ITEM_TRANSITION">EVENT_MEDIA_ITEM_TRANSITION</a>, <a href="AnalyticsListener.html#EVENT_MEDIA_METADATA_CHANGED">EVENT_MEDIA_METADATA_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_METADATA">EVENT_METADATA</a>, <a href="AnalyticsListener.html#EVENT_PLAY_WHEN_READY_CHANGED">EVENT_PLAY_WHEN_READY_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_PLAYBACK_PARAMETERS_CHANGED">EVENT_PLAYBACK_PARAMETERS_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_PLAYBACK_STATE_CHANGED">EVENT_PLAYBACK_STATE_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED">EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_PLAYER_ERROR">EVENT_PLAYER_ERROR</a>, <a href="AnalyticsListener.html#EVENT_PLAYER_RELEASED">EVENT_PLAYER_RELEASED</a>, <a href="AnalyticsListener.html#EVENT_PLAYLIST_METADATA_CHANGED">EVENT_PLAYLIST_METADATA_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_POSITION_DISCONTINUITY">EVENT_POSITION_DISCONTINUITY</a>, <a href="AnalyticsListener.html#EVENT_RENDERED_FIRST_FRAME">EVENT_RENDERED_FIRST_FRAME</a>, <a href="AnalyticsListener.html#EVENT_REPEAT_MODE_CHANGED">EVENT_REPEAT_MODE_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_SEEK_BACK_INCREMENT_CHANGED">EVENT_SEEK_BACK_INCREMENT_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_SEEK_FORWARD_INCREMENT_CHANGED">EVENT_SEEK_FORWARD_INCREMENT_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_SHUFFLE_MODE_ENABLED_CHANGED">EVENT_SHUFFLE_MODE_ENABLED_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_SKIP_SILENCE_ENABLED_CHANGED">EVENT_SKIP_SILENCE_ENABLED_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_SURFACE_SIZE_CHANGED">EVENT_SURFACE_SIZE_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_TIMELINE_CHANGED">EVENT_TIMELINE_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_TRACK_SELECTION_PARAMETERS_CHANGED">EVENT_TRACK_SELECTION_PARAMETERS_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_TRACKS_CHANGED">EVENT_TRACKS_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_UPSTREAM_DISCARDED">EVENT_UPSTREAM_DISCARDED</a>, <a href="AnalyticsListener.html#EVENT_VIDEO_CODEC_ERROR">EVENT_VIDEO_CODEC_ERROR</a>, <a href="AnalyticsListener.html#EVENT_VIDEO_DECODER_INITIALIZED">EVENT_VIDEO_DECODER_INITIALIZED</a>, <a href="AnalyticsListener.html#EVENT_VIDEO_DECODER_RELEASED">EVENT_VIDEO_DECODER_RELEASED</a>, <a href="AnalyticsListener.html#EVENT_VIDEO_DISABLED">EVENT_VIDEO_DISABLED</a>, <a href="AnalyticsListener.html#EVENT_VIDEO_ENABLED">EVENT_VIDEO_ENABLED</a>, <a href="AnalyticsListener.html#EVENT_VIDEO_FRAME_PROCESSING_OFFSET">EVENT_VIDEO_FRAME_PROCESSING_OFFSET</a>, <a href="AnalyticsListener.html#EVENT_VIDEO_INPUT_FORMAT_CHANGED">EVENT_VIDEO_INPUT_FORMAT_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_VIDEO_SIZE_CHANGED">EVENT_VIDEO_SIZE_CHANGED</a>, <a href="AnalyticsListener.html#EVENT_VOLUME_CHANGED">EVENT_VOLUME_CHANGED</a></code></li>
179</ul>
180</li>
181</ul>
182</section>
183<!-- ========== METHOD SUMMARY =========== -->
184<section role="region">
185<ul class="blockList">
186<li class="blockList"><a id="method.summary">
187<!--   -->
188</a>
189<h3>Method Summary</h3>
190<table class="memberSummary">
191<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></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="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
192<tr>
193<th class="colFirst" scope="col">Modifier and Type</th>
194<th class="colSecond" scope="col">Method</th>
195<th class="colLast" scope="col">Description</th>
196</tr>
197<tr id="i0" class="altColor">
198<td class="colFirst"><code>static <a href="MediaMetricsListener.html" title="class in com.google.android.exoplayer2.analytics">MediaMetricsListener</a></code></td>
199<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#create(android.content.Context)">create</a></span>&#8203;(<a href="https://developer.android.com/reference/android/content/Context.html" title="class or interface in android.content" class="externalLink" target="_top">Context</a>&nbsp;context)</code></th>
200<td class="colLast">
201<div class="block">Creates a media metrics listener.</div>
202</td>
203</tr>
204<tr id="i1" class="rowColor">
205<td class="colFirst"><code><a href="https://developer.android.com/reference/android/media/metrics/LogSessionId.html" title="class or interface in android.media.metrics" class="externalLink" target="_top">LogSessionId</a></code></td>
206<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getLogSessionId()">getLogSessionId</a></span>()</code></th>
207<td class="colLast">
208<div class="block">Returns the <a href="https://developer.android.com/reference/android/media/metrics/LogSessionId.html" title="class or interface in android.media.metrics" class="externalLink" target="_top"><code>LogSessionId</code></a> used by this listener.</div>
209</td>
210</tr>
211<tr id="i2" class="altColor">
212<td class="colFirst"><code>void</code></td>
213<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onAdPlaybackStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,java.lang.String)">onAdPlaybackStarted</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
214                   <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;contentSessionId,
215                   <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;adSessionId)</code></th>
216<td class="colLast">
217<div class="block">Called when a session is interrupted by ad playback.</div>
218</td>
219</tr>
220<tr id="i3" class="rowColor">
221<td class="colFirst"><code>void</code></td>
222<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onBandwidthEstimate(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">onBandwidthEstimate</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
223                   int&nbsp;totalLoadTimeMs,
224                   long&nbsp;totalBytesLoaded,
225                   long&nbsp;bitrateEstimate)</code></th>
226<td class="colLast">
227<div class="block">Called when the bandwidth estimate for the current data source has been updated.</div>
228</td>
229</tr>
230<tr id="i4" class="altColor">
231<td class="colFirst"><code>void</code></td>
232<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onDownstreamFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">onDownstreamFormatChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
233                         <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</code></th>
234<td class="colLast">
235<div class="block">Called when the downstream format sent to the renderers changed.</div>
236</td>
237</tr>
238<tr id="i5" class="rowColor">
239<td class="colFirst"><code>void</code></td>
240<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.analytics.AnalyticsListener.Events)">onEvents</a></span>&#8203;(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player,
241        <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.Events</a>&nbsp;events)</code></th>
242<td class="colLast">
243<div class="block">Called after one or more events occurred.</div>
244</td>
245</tr>
246<tr id="i6" class="altColor">
247<td class="colFirst"><code>void</code></td>
248<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onLoadError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">onLoadError</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
249           <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
250           <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData,
251           <a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top">IOException</a>&nbsp;error,
252           boolean&nbsp;wasCanceled)</code></th>
253<td class="colLast">
254<div class="block">Called when a media source loading error occurred.</div>
255</td>
256</tr>
257<tr id="i7" class="rowColor">
258<td class="colFirst"><code>void</code></td>
259<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPlayerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackException)">onPlayerError</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
260             <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;error)</code></th>
261<td class="colLast">
262<div class="block">Called when a fatal player error occurred.</div>
263</td>
264</tr>
265<tr id="i8" class="altColor">
266<td class="colFirst"><code>void</code></td>
267<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">onPositionDiscontinuity</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
268                       <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;oldPosition,
269                       <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;newPosition,
270                       @com.google.android.exoplayer2.Player.DiscontinuityReason int&nbsp;reason)</code></th>
271<td class="colLast">
272<div class="block">Called when a position discontinuity occurred.</div>
273</td>
274</tr>
275<tr id="i9" class="rowColor">
276<td class="colFirst"><code>void</code></td>
277<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSessionActive(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">onSessionActive</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
278               <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;sessionId)</code></th>
279<td class="colLast">
280<div class="block">Called when a session becomes active, i.e.</div>
281</td>
282</tr>
283<tr id="i10" class="altColor">
284<td class="colFirst"><code>void</code></td>
285<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSessionCreated(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">onSessionCreated</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
286                <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;sessionId)</code></th>
287<td class="colLast">
288<div class="block">Called when a new session is created as a result of <a href="PlaybackSessionManager.html#updateSessions(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)"><code>PlaybackSessionManager.updateSessions(EventTime)</code></a>.</div>
289</td>
290</tr>
291<tr id="i11" class="rowColor">
292<td class="colFirst"><code>void</code></td>
293<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onSessionFinished(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,boolean)">onSessionFinished</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
294                 <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;sessionId,
295                 boolean&nbsp;automaticTransitionToNextPlayback)</code></th>
296<td class="colLast">
297<div class="block">Called when a session is permanently finished.</div>
298</td>
299</tr>
300<tr id="i12" class="altColor">
301<td class="colFirst"><code>void</code></td>
302<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoDisabled</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
303               <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</code></th>
304<td class="colLast">
305<div class="block">Called when a video renderer is disabled.</div>
306</td>
307</tr>
308<tr id="i13" class="rowColor">
309<td class="colFirst"><code>void</code></td>
310<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.video.VideoSize)">onVideoSizeChanged</a></span>&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
311                  <a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;videoSize)</code></th>
312<td class="colLast">
313<div class="block">Called before a frame is rendered for the first time since setting the surface, and each time
314 there's a change in the size or pixel aspect ratio of the video being rendered.</div>
315</td>
316</tr>
317</table>
318<ul class="blockList">
319<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
320<!--   -->
321</a>
322<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>
323<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>
324</ul>
325<ul class="blockList">
326<li class="blockList"><a id="methods.inherited.from.class.com.google.android.exoplayer2.analytics.AnalyticsListener">
327<!--   -->
328</a>
329<h3>Methods inherited from interface&nbsp;com.google.android.exoplayer2.analytics.<a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></h3>
330<code><a href="AnalyticsListener.html#onAudioAttributesChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.audio.AudioAttributes)">onAudioAttributesChanged</a>, <a href="AnalyticsListener.html#onAudioCodecError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">onAudioCodecError</a>, <a href="AnalyticsListener.html#onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long)">onAudioDecoderInitialized</a>, <a href="AnalyticsListener.html#onAudioDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)">onAudioDecoderInitialized</a>, <a href="AnalyticsListener.html#onAudioDecoderReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">onAudioDecoderReleased</a>, <a href="AnalyticsListener.html#onAudioDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onAudioDisabled</a>, <a href="AnalyticsListener.html#onAudioEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onAudioEnabled</a>, <a href="AnalyticsListener.html#onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format)">onAudioInputFormatChanged</a>, <a href="AnalyticsListener.html#onAudioInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onAudioInputFormatChanged</a>, <a href="AnalyticsListener.html#onAudioPositionAdvancing(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">onAudioPositionAdvancing</a>, <a href="AnalyticsListener.html#onAudioSessionIdChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int)">onAudioSessionIdChanged</a>, <a href="AnalyticsListener.html#onAudioSinkError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">onAudioSinkError</a>, <a href="AnalyticsListener.html#onAudioUnderrun(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">onAudioUnderrun</a>, <a href="AnalyticsListener.html#onAvailableCommandsChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.Commands)">onAvailableCommandsChanged</a>, <a href="AnalyticsListener.html#onCues(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.util.List)">onCues</a>, <a href="AnalyticsListener.html#onDecoderDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.decoder.DecoderCounters)">onDecoderDisabled</a>, <a href="AnalyticsListener.html#onDecoderEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.decoder.DecoderCounters)">onDecoderEnabled</a>, <a href="AnalyticsListener.html#onDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,java.lang.String,long)">onDecoderInitialized</a>, <a href="AnalyticsListener.html#onDecoderInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,com.google.android.exoplayer2.Format)">onDecoderInputFormatChanged</a>, <a href="AnalyticsListener.html#onDeviceInfoChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.DeviceInfo)">onDeviceInfoChanged</a>, <a href="AnalyticsListener.html#onDeviceVolumeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,boolean)">onDeviceVolumeChanged</a>, <a href="AnalyticsListener.html#onDrmKeysLoaded(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmKeysLoaded</a>, <a href="AnalyticsListener.html#onDrmKeysRemoved(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmKeysRemoved</a>, <a href="AnalyticsListener.html#onDrmKeysRestored(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmKeysRestored</a>, <a href="AnalyticsListener.html#onDrmSessionAcquired(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmSessionAcquired</a>, <a href="AnalyticsListener.html#onDrmSessionAcquired(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.drm.DrmSession.Stateint)">onDrmSessionAcquired</a>, <a href="AnalyticsListener.html#onDrmSessionManagerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">onDrmSessionManagerError</a>, <a href="AnalyticsListener.html#onDrmSessionReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onDrmSessionReleased</a>, <a href="AnalyticsListener.html#onDroppedVideoFrames(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long)">onDroppedVideoFrames</a>, <a href="AnalyticsListener.html#onIsLoadingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onIsLoadingChanged</a>, <a href="AnalyticsListener.html#onIsPlayingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onIsPlayingChanged</a>, <a href="AnalyticsListener.html#onLoadCanceled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadCanceled</a>, <a href="AnalyticsListener.html#onLoadCompleted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadCompleted</a>, <a href="AnalyticsListener.html#onLoadingChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onLoadingChanged</a>, <a href="AnalyticsListener.html#onLoadStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData)">onLoadStarted</a>, <a href="AnalyticsListener.html#onMaxSeekToPreviousPositionChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">onMaxSeekToPreviousPositionChanged</a>, <a href="AnalyticsListener.html#onMediaItemTransition(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)">onMediaItemTransition</a>, <a href="AnalyticsListener.html#onMediaMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaMetadata)">onMediaMetadataChanged</a>, <a href="AnalyticsListener.html#onMetadata(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.metadata.Metadata)">onMetadata</a>, <a href="AnalyticsListener.html#onPlaybackParametersChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackParameters)">onPlaybackParametersChanged</a>, <a href="AnalyticsListener.html#onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.Player.Stateint)">onPlaybackStateChanged</a>, <a href="AnalyticsListener.html#onPlaybackSuppressionReasonChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.Player.PlaybackSuppressionReasonint)">onPlaybackSuppressionReasonChanged</a>, <a href="AnalyticsListener.html#onPlayerErrorChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackException)">onPlayerErrorChanged</a>, <a href="AnalyticsListener.html#onPlayerReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onPlayerReleased</a>, <a href="AnalyticsListener.html#onPlayerStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,@com.google.android.exoplayer2.Player.Stateint)">onPlayerStateChanged</a>, <a href="AnalyticsListener.html#onPlaylistMetadataChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaMetadata)">onPlaylistMetadataChanged</a>, <a href="AnalyticsListener.html#onPlayWhenReadyChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,@com.google.android.exoplayer2.Player.PlayWhenReadyChangeReasonint)">onPlayWhenReadyChanged</a>, <a href="AnalyticsListener.html#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">onPositionDiscontinuity</a>, <a href="AnalyticsListener.html#onRenderedFirstFrame(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Object,long)">onRenderedFirstFrame</a>, <a href="AnalyticsListener.html#onRepeatModeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.Player.RepeatModeint)">onRepeatModeChanged</a>, <a href="AnalyticsListener.html#onSeekBackIncrementChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">onSeekBackIncrementChanged</a>, <a href="AnalyticsListener.html#onSeekForwardIncrementChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long)">onSeekForwardIncrementChanged</a>, <a href="AnalyticsListener.html#onSeekProcessed(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onSeekProcessed</a>, <a href="AnalyticsListener.html#onSeekStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)">onSeekStarted</a>, <a href="AnalyticsListener.html#onShuffleModeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onShuffleModeChanged</a>, <a href="AnalyticsListener.html#onSkipSilenceEnabledChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean)">onSkipSilenceEnabledChanged</a>, <a href="AnalyticsListener.html#onSurfaceSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,int)">onSurfaceSizeChanged</a>, <a href="AnalyticsListener.html#onTimelineChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.Player.TimelineChangeReasonint)">onTimelineChanged</a>, <a href="AnalyticsListener.html#onTracksChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.TrackGroupArray,com.google.android.exoplayer2.trackselection.TrackSelectionArray)">onTracksChanged</a>, <a href="AnalyticsListener.html#onTrackSelectionParametersChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.trackselection.TrackSelectionParameters)">onTrackSelectionParametersChanged</a>, <a href="AnalyticsListener.html#onTracksInfoChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.TracksInfo)">onTracksInfoChanged</a>, <a href="AnalyticsListener.html#onUpstreamDiscarded(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">onUpstreamDiscarded</a>, <a href="AnalyticsListener.html#onVideoCodecError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.Exception)">onVideoCodecError</a>, <a href="AnalyticsListener.html#onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long)">onVideoDecoderInitialized</a>, <a href="AnalyticsListener.html#onVideoDecoderInitialized(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,long,long)">onVideoDecoderInitialized</a>, <a href="AnalyticsListener.html#onVideoDecoderReleased(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">onVideoDecoderReleased</a>, <a href="AnalyticsListener.html#onVideoEnabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoEnabled</a>, <a href="AnalyticsListener.html#onVideoFrameProcessingOffset(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,long,int)">onVideoFrameProcessingOffset</a>, <a href="AnalyticsListener.html#onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format)">onVideoInputFormatChanged</a>, <a href="AnalyticsListener.html#onVideoInputFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Format,com.google.android.exoplayer2.decoder.DecoderReuseEvaluation)">onVideoInputFormatChanged</a>, <a href="AnalyticsListener.html#onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,int,int,float)">onVideoSizeChanged</a>, <a href="AnalyticsListener.html#onVolumeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,float)">onVolumeChanged</a></code></li>
331</ul>
332</li>
333</ul>
334</section>
335</li>
336</ul>
337</div>
338<div class="details">
339<ul class="blockList">
340<li class="blockList">
341<!-- ============ METHOD DETAIL ========== -->
342<section role="region">
343<ul class="blockList">
344<li class="blockList"><a id="method.detail">
345<!--   -->
346</a>
347<h3>Method Detail</h3>
348<a id="create(android.content.Context)">
349<!--   -->
350</a>
351<ul class="blockList">
352<li class="blockList">
353<h4>create</h4>
354<pre class="methodSignature">@Nullable
355public static&nbsp;<a href="MediaMetricsListener.html" title="class in com.google.android.exoplayer2.analytics">MediaMetricsListener</a>&nbsp;create&#8203;(<a href="https://developer.android.com/reference/android/content/Context.html" title="class or interface in android.content" class="externalLink" target="_top">Context</a>&nbsp;context)</pre>
356<div class="block">Creates a media metrics listener.</div>
357<dl>
358<dt><span class="paramLabel">Parameters:</span></dt>
359<dd><code>context</code> - A context.</dd>
360<dt><span class="returnLabel">Returns:</span></dt>
361<dd>The <a href="MediaMetricsListener.html" title="class in com.google.android.exoplayer2.analytics"><code>MediaMetricsListener</code></a>, or null if the <a href="https://developer.android.com/reference/android/content/Context.html#MEDIA_METRICS_SERVICE" title="class or interface in android.content" class="externalLink" target="_top"><code>media metrics service</code></a> isn't available.</dd>
362</dl>
363</li>
364</ul>
365<a id="getLogSessionId()">
366<!--   -->
367</a>
368<ul class="blockList">
369<li class="blockList">
370<h4>getLogSessionId</h4>
371<pre class="methodSignature">public&nbsp;<a href="https://developer.android.com/reference/android/media/metrics/LogSessionId.html" title="class or interface in android.media.metrics" class="externalLink" target="_top">LogSessionId</a>&nbsp;getLogSessionId()</pre>
372<div class="block">Returns the <a href="https://developer.android.com/reference/android/media/metrics/LogSessionId.html" title="class or interface in android.media.metrics" class="externalLink" target="_top"><code>LogSessionId</code></a> used by this listener.</div>
373</li>
374</ul>
375<a id="onSessionCreated(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">
376<!--   -->
377</a>
378<ul class="blockList">
379<li class="blockList">
380<h4>onSessionCreated</h4>
381<pre class="methodSignature">public&nbsp;void&nbsp;onSessionCreated&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
382                             <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;sessionId)</pre>
383<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="PlaybackSessionManager.Listener.html#onSessionCreated(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">PlaybackSessionManager.Listener</a></code></span></div>
384<div class="block">Called when a new session is created as a result of <a href="PlaybackSessionManager.html#updateSessions(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime)"><code>PlaybackSessionManager.updateSessions(EventTime)</code></a>.</div>
385<dl>
386<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
387<dd><code><a href="PlaybackSessionManager.Listener.html#onSessionCreated(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">onSessionCreated</a></code>&nbsp;in interface&nbsp;<code><a href="PlaybackSessionManager.Listener.html" title="interface in com.google.android.exoplayer2.analytics">PlaybackSessionManager.Listener</a></code></dd>
388<dt><span class="paramLabel">Parameters:</span></dt>
389<dd><code>eventTime</code> - The <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> at which the session is created.</dd>
390<dd><code>sessionId</code> - The identifier of the new session.</dd>
391</dl>
392</li>
393</ul>
394<a id="onSessionActive(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">
395<!--   -->
396</a>
397<ul class="blockList">
398<li class="blockList">
399<h4>onSessionActive</h4>
400<pre class="methodSignature">public&nbsp;void&nbsp;onSessionActive&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
401                            <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;sessionId)</pre>
402<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="PlaybackSessionManager.Listener.html#onSessionActive(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">PlaybackSessionManager.Listener</a></code></span></div>
403<div class="block">Called when a session becomes active, i.e. playing in the foreground.</div>
404<dl>
405<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
406<dd><code><a href="PlaybackSessionManager.Listener.html#onSessionActive(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String)">onSessionActive</a></code>&nbsp;in interface&nbsp;<code><a href="PlaybackSessionManager.Listener.html" title="interface in com.google.android.exoplayer2.analytics">PlaybackSessionManager.Listener</a></code></dd>
407<dt><span class="paramLabel">Parameters:</span></dt>
408<dd><code>eventTime</code> - The <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> at which the session becomes active.</dd>
409<dd><code>sessionId</code> - The identifier of the session.</dd>
410</dl>
411</li>
412</ul>
413<a id="onAdPlaybackStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,java.lang.String)">
414<!--   -->
415</a>
416<ul class="blockList">
417<li class="blockList">
418<h4>onAdPlaybackStarted</h4>
419<pre class="methodSignature">public&nbsp;void&nbsp;onAdPlaybackStarted&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
420                                <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;contentSessionId,
421                                <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;adSessionId)</pre>
422<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="PlaybackSessionManager.Listener.html#onAdPlaybackStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,java.lang.String)">PlaybackSessionManager.Listener</a></code></span></div>
423<div class="block">Called when a session is interrupted by ad playback.</div>
424<dl>
425<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
426<dd><code><a href="PlaybackSessionManager.Listener.html#onAdPlaybackStarted(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,java.lang.String)">onAdPlaybackStarted</a></code>&nbsp;in interface&nbsp;<code><a href="PlaybackSessionManager.Listener.html" title="interface in com.google.android.exoplayer2.analytics">PlaybackSessionManager.Listener</a></code></dd>
427<dt><span class="paramLabel">Parameters:</span></dt>
428<dd><code>eventTime</code> - The <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> at which the ad playback starts.</dd>
429<dd><code>contentSessionId</code> - The session identifier of the content session.</dd>
430<dd><code>adSessionId</code> - The identifier of the ad session.</dd>
431</dl>
432</li>
433</ul>
434<a id="onSessionFinished(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,boolean)">
435<!--   -->
436</a>
437<ul class="blockList">
438<li class="blockList">
439<h4>onSessionFinished</h4>
440<pre class="methodSignature">public&nbsp;void&nbsp;onSessionFinished&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
441                              <a href="https://developer.android.com/reference/java/lang/String.html" title="class or interface in java.lang" class="externalLink" target="_top">String</a>&nbsp;sessionId,
442                              boolean&nbsp;automaticTransitionToNextPlayback)</pre>
443<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="PlaybackSessionManager.Listener.html#onSessionFinished(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,boolean)">PlaybackSessionManager.Listener</a></code></span></div>
444<div class="block">Called when a session is permanently finished.</div>
445<dl>
446<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
447<dd><code><a href="PlaybackSessionManager.Listener.html#onSessionFinished(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,java.lang.String,boolean)">onSessionFinished</a></code>&nbsp;in interface&nbsp;<code><a href="PlaybackSessionManager.Listener.html" title="interface in com.google.android.exoplayer2.analytics">PlaybackSessionManager.Listener</a></code></dd>
448<dt><span class="paramLabel">Parameters:</span></dt>
449<dd><code>eventTime</code> - The <a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.EventTime</code></a> at which the session finished.</dd>
450<dd><code>sessionId</code> - The identifier of the finished session.</dd>
451<dd><code>automaticTransitionToNextPlayback</code> - Whether the session finished because of an automatic
452     transition to the next playback item.</dd>
453</dl>
454</li>
455</ul>
456<a id="onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">
457<!--   -->
458</a>
459<ul class="blockList">
460<li class="blockList">
461<h4>onPositionDiscontinuity</h4>
462<pre class="methodSignature">public&nbsp;void&nbsp;onPositionDiscontinuity&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
463                                    <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;oldPosition,
464                                    <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a>&nbsp;newPosition,
465                                    <a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a>
466                                    @com.google.android.exoplayer2.Player.DiscontinuityReason int&nbsp;reason)</pre>
467<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsListener.html#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">AnalyticsListener</a></code></span></div>
468<div class="block">Called when a position discontinuity occurred.</div>
469<dl>
470<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
471<dd><code><a href="AnalyticsListener.html#onPositionDiscontinuity(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.Player.PositionInfo,com.google.android.exoplayer2.Player.PositionInfo,@com.google.android.exoplayer2.Player.DiscontinuityReasonint)">onPositionDiscontinuity</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code></dd>
472<dt><span class="paramLabel">Parameters:</span></dt>
473<dd><code>eventTime</code> - The event time.</dd>
474<dd><code>oldPosition</code> - The position before the discontinuity.</dd>
475<dd><code>newPosition</code> - The position after the discontinuity.</dd>
476<dd><code>reason</code> - The reason for the position discontinuity.</dd>
477</dl>
478</li>
479</ul>
480<a id="onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">
481<!--   -->
482</a>
483<ul class="blockList">
484<li class="blockList">
485<h4>onVideoDisabled</h4>
486<pre class="methodSignature">public&nbsp;void&nbsp;onVideoDisabled&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
487                            <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a>&nbsp;decoderCounters)</pre>
488<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsListener.html#onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">AnalyticsListener</a></code></span></div>
489<div class="block">Called when a video renderer is disabled.</div>
490<dl>
491<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
492<dd><code><a href="AnalyticsListener.html#onVideoDisabled(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.decoder.DecoderCounters)">onVideoDisabled</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code></dd>
493<dt><span class="paramLabel">Parameters:</span></dt>
494<dd><code>eventTime</code> - The event time.</dd>
495<dd><code>decoderCounters</code> - <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder"><code>DecoderCounters</code></a> that were updated by the renderer.</dd>
496</dl>
497</li>
498</ul>
499<a id="onBandwidthEstimate(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">
500<!--   -->
501</a>
502<ul class="blockList">
503<li class="blockList">
504<h4>onBandwidthEstimate</h4>
505<pre class="methodSignature">public&nbsp;void&nbsp;onBandwidthEstimate&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
506                                int&nbsp;totalLoadTimeMs,
507                                long&nbsp;totalBytesLoaded,
508                                long&nbsp;bitrateEstimate)</pre>
509<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsListener.html#onBandwidthEstimate(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">AnalyticsListener</a></code></span></div>
510<div class="block">Called when the bandwidth estimate for the current data source has been updated.</div>
511<dl>
512<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
513<dd><code><a href="AnalyticsListener.html#onBandwidthEstimate(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,int,long,long)">onBandwidthEstimate</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code></dd>
514<dt><span class="paramLabel">Parameters:</span></dt>
515<dd><code>eventTime</code> - The event time.</dd>
516<dd><code>totalLoadTimeMs</code> - The total time spend loading this update is based on, in milliseconds.</dd>
517<dd><code>totalBytesLoaded</code> - The total bytes loaded this update is based on.</dd>
518<dd><code>bitrateEstimate</code> - The bandwidth estimate, in bits per second.</dd>
519</dl>
520</li>
521</ul>
522<a id="onDownstreamFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">
523<!--   -->
524</a>
525<ul class="blockList">
526<li class="blockList">
527<h4>onDownstreamFormatChanged</h4>
528<pre class="methodSignature">public&nbsp;void&nbsp;onDownstreamFormatChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
529                                      <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData)</pre>
530<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsListener.html#onDownstreamFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">AnalyticsListener</a></code></span></div>
531<div class="block">Called when the downstream format sent to the renderers changed.</div>
532<dl>
533<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
534<dd><code><a href="AnalyticsListener.html#onDownstreamFormatChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.MediaLoadData)">onDownstreamFormatChanged</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code></dd>
535<dt><span class="paramLabel">Parameters:</span></dt>
536<dd><code>eventTime</code> - The event time.</dd>
537<dd><code>mediaLoadData</code> - The <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source"><code>MediaLoadData</code></a> defining the newly selected media data.</dd>
538</dl>
539</li>
540</ul>
541<a id="onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.video.VideoSize)">
542<!--   -->
543</a>
544<ul class="blockList">
545<li class="blockList">
546<h4>onVideoSizeChanged</h4>
547<pre class="methodSignature">public&nbsp;void&nbsp;onVideoSizeChanged&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
548                               <a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a>&nbsp;videoSize)</pre>
549<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsListener.html#onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.video.VideoSize)">AnalyticsListener</a></code></span></div>
550<div class="block">Called before a frame is rendered for the first time since setting the surface, and each time
551 there's a change in the size or pixel aspect ratio of the video being rendered.</div>
552<dl>
553<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
554<dd><code><a href="AnalyticsListener.html#onVideoSizeChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.video.VideoSize)">onVideoSizeChanged</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code></dd>
555<dt><span class="paramLabel">Parameters:</span></dt>
556<dd><code>eventTime</code> - The event time.</dd>
557<dd><code>videoSize</code> - The new size of the video.</dd>
558</dl>
559</li>
560</ul>
561<a id="onLoadError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">
562<!--   -->
563</a>
564<ul class="blockList">
565<li class="blockList">
566<h4>onLoadError</h4>
567<pre class="methodSignature">public&nbsp;void&nbsp;onLoadError&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
568                        <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a>&nbsp;loadEventInfo,
569                        <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a>&nbsp;mediaLoadData,
570                        <a href="https://developer.android.com/reference/java/io/IOException.html" title="class or interface in java.io" class="externalLink" target="_top">IOException</a>&nbsp;error,
571                        boolean&nbsp;wasCanceled)</pre>
572<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsListener.html#onLoadError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">AnalyticsListener</a></code></span></div>
573<div class="block">Called when a media source loading error occurred.
574
575 <p>This method being called does not indicate that playback has failed, or that it will fail.
576 The player may be able to recover from the error. Hence applications should <em>not</em>
577 implement this method to display a user visible error or initiate an application level retry.
578 <a href="../Player.Listener.html#onPlayerError(com.google.android.exoplayer2.PlaybackException)"><code>Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)</code></a> is the appropriate place to implement such behavior. This
579 method is called to provide the application with an opportunity to log the error if it wishes
580 to do so.</div>
581<dl>
582<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
583<dd><code><a href="AnalyticsListener.html#onLoadError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.source.LoadEventInfo,com.google.android.exoplayer2.source.MediaLoadData,java.io.IOException,boolean)">onLoadError</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code></dd>
584<dt><span class="paramLabel">Parameters:</span></dt>
585<dd><code>eventTime</code> - The event time.</dd>
586<dd><code>loadEventInfo</code> - The <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source"><code>LoadEventInfo</code></a> defining the load event.</dd>
587<dd><code>mediaLoadData</code> - The <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source"><code>MediaLoadData</code></a> defining the data being loaded.</dd>
588<dd><code>error</code> - The load error.</dd>
589<dd><code>wasCanceled</code> - Whether the load was canceled as a result of the error.</dd>
590</dl>
591</li>
592</ul>
593<a id="onPlayerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackException)">
594<!--   -->
595</a>
596<ul class="blockList">
597<li class="blockList">
598<h4>onPlayerError</h4>
599<pre class="methodSignature">public&nbsp;void&nbsp;onPlayerError&#8203;(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a>&nbsp;eventTime,
600                          <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a>&nbsp;error)</pre>
601<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsListener.html#onPlayerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackException)">AnalyticsListener</a></code></span></div>
602<div class="block">Called when a fatal player error occurred.
603
604 <p>Implementations of <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> may pass an instance of a subclass of <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2"><code>PlaybackException</code></a> to this method in order to include more information about the error.</div>
605<dl>
606<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
607<dd><code><a href="AnalyticsListener.html#onPlayerError(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.PlaybackException)">onPlayerError</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code></dd>
608<dt><span class="paramLabel">Parameters:</span></dt>
609<dd><code>eventTime</code> - The event time.</dd>
610<dd><code>error</code> - The error.</dd>
611</dl>
612</li>
613</ul>
614<a id="onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.analytics.AnalyticsListener.Events)">
615<!--   -->
616</a>
617<ul class="blockListLast">
618<li class="blockList">
619<h4>onEvents</h4>
620<pre class="methodSignature">public&nbsp;void&nbsp;onEvents&#8203;(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a>&nbsp;player,
621                     <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.Events</a>&nbsp;events)</pre>
622<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="AnalyticsListener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.analytics.AnalyticsListener.Events)">AnalyticsListener</a></code></span></div>
623<div class="block">Called after one or more events occurred.
624
625 <p>State changes and events that happen within one <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> message queue iteration are
626 reported together and only after all individual callbacks were triggered.
627
628 <p>Listeners should prefer this method over individual callbacks in the following cases:
629
630 <ul>
631   <li>They intend to trigger the same logic for multiple events (e.g. when updating a UI for
632       both <a href="AnalyticsListener.html#onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.Player.Stateint)"><code>AnalyticsListener.onPlaybackStateChanged(EventTime, int)</code></a> and <a href="AnalyticsListener.html#onPlayWhenReadyChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,boolean,@com.google.android.exoplayer2.Player.PlayWhenReadyChangeReasonint)"><code>AnalyticsListener.onPlayWhenReadyChanged(EventTime, boolean, int)</code></a>).
633   <li>They need access to the <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a> object to trigger further events (e.g. to call
634       <a href="../Player.html#seekTo(long)"><code>Player.seekTo(long)</code></a> after a <a href="AnalyticsListener.html#onMediaItemTransition(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)"><code>AnalyticsListener.onMediaItemTransition(EventTime, MediaItem, int)</code></a>).
635   <li>They intend to use multiple state values together or in combination with <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a>
636       getter methods. For example using <a href="../Player.html#getCurrentMediaItemIndex()"><code>Player.getCurrentMediaItemIndex()</code></a> with the
637       <code>timeline</code> provided in <a href="AnalyticsListener.html#onTimelineChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.Player.TimelineChangeReasonint)"><code>AnalyticsListener.onTimelineChanged(EventTime, int)</code></a> is only safe from
638       within this method.
639   <li>They are interested in events that logically happened together (e.g <a href="AnalyticsListener.html#onPlaybackStateChanged(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,@com.google.android.exoplayer2.Player.Stateint)"><code>AnalyticsListener.onPlaybackStateChanged(EventTime, int)</code></a> to <a href="../Player.html#STATE_BUFFERING"><code>Player.STATE_BUFFERING</code></a> because of
640       <a href="AnalyticsListener.html#onMediaItemTransition(com.google.android.exoplayer2.analytics.AnalyticsListener.EventTime,com.google.android.exoplayer2.MediaItem,@com.google.android.exoplayer2.Player.MediaItemTransitionReasonint)"><code>AnalyticsListener.onMediaItemTransition(EventTime, MediaItem, int)</code></a>).
641 </ul></div>
642<dl>
643<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
644<dd><code><a href="AnalyticsListener.html#onEvents(com.google.android.exoplayer2.Player,com.google.android.exoplayer2.analytics.AnalyticsListener.Events)">onEvents</a></code>&nbsp;in interface&nbsp;<code><a href="AnalyticsListener.html" title="interface in com.google.android.exoplayer2.analytics">AnalyticsListener</a></code></dd>
645<dt><span class="paramLabel">Parameters:</span></dt>
646<dd><code>player</code> - The <a href="../Player.html" title="interface in com.google.android.exoplayer2"><code>Player</code></a>.</dd>
647<dd><code>events</code> - The <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics"><code>AnalyticsListener.Events</code></a> that occurred in this iteration.</dd>
648</dl>
649</li>
650</ul>
651</li>
652</ul>
653</section>
654</li>
655</ul>
656</div>
657</div>
658</main>
659<!-- ========= END OF CLASS DATA ========= -->
660<footer role="contentinfo">
661<nav role="navigation">
662<!-- ======= START OF BOTTOM NAVBAR ====== -->
663<div class="bottomNav"><a id="navbar.bottom">
664<!--   -->
665</a>
666<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
667<a id="navbar.bottom.firstrow">
668<!--   -->
669</a>
670<ul class="navList" title="Navigation">
671<li><a href="../../../../../index.html">Overview</a></li>
672<li><a href="package-summary.html">Package</a></li>
673<li class="navBarCell1Rev">Class</li>
674<li><a href="package-tree.html">Tree</a></li>
675<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
676<li><a href="../../../../../index-all.html">Index</a></li>
677<li><a href="../../../../../help-doc.html">Help</a></li>
678</ul>
679</div>
680<div class="subNav">
681<ul class="navList" id="allclasses_navbar_bottom">
682<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
683</ul>
684<div>
685<script type="text/javascript"><!--
686  allClassesLink = document.getElementById("allclasses_navbar_bottom");
687  if(window==top) {
688    allClassesLink.style.display = "block";
689  }
690  else {
691    allClassesLink.style.display = "none";
692  }
693  //-->
694</script>
695<noscript>
696<div>JavaScript is disabled on your browser.</div>
697</noscript>
698</div>
699<div>
700<ul class="subNavList">
701<li>Summary:&nbsp;</li>
702<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
703<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
704<li>Constr&nbsp;|&nbsp;</li>
705<li><a href="#method.summary">Method</a></li>
706</ul>
707<ul class="subNavList">
708<li>Detail:&nbsp;</li>
709<li>Field&nbsp;|&nbsp;</li>
710<li>Constr&nbsp;|&nbsp;</li>
711<li><a href="#method.detail">Method</a></li>
712</ul>
713</div>
714<a id="skip.navbar.bottom">
715<!--   -->
716</a></div>
717<!-- ======== END OF BOTTOM NAVBAR ======= -->
718</nav>
719</footer>
720</body>
721</html>
722