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 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: </li> 89<li><a href="#nested.class.summary">Nested</a> | </li> 90<li><a href="#field.summary">Field</a> | </li> 91<li>Constr | </li> 92<li><a href="#method.summary">Method</a></li> 93</ul> 94<ul class="subNavList"> 95<li>Detail: </li> 96<li>Field | </li> 97<li>Constr | </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"> </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> <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 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 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"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </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>​(<a href="https://developer.android.com/reference/android/content/Context.html" title="class or interface in android.content" class="externalLink" target="_top">Context</a> 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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> 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> 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 223 int totalLoadTimeMs, 224 long totalBytesLoaded, 225 long 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 233 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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>​(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a> player, 241 <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.Events</a> 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 249 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 250 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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> error, 252 boolean 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 260 <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a> 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 268 <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a> oldPosition, 269 <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a> newPosition, 270 @com.google.android.exoplayer2.Player.DiscontinuityReason int 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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> 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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> 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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> sessionId, 295 boolean 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 303 <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> 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>​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 311 <a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a> 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 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 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 <a href="MediaMetricsListener.html" title="class in com.google.android.exoplayer2.analytics">MediaMetricsListener</a> create​(<a href="https://developer.android.com/reference/android/content/Context.html" title="class or interface in android.content" class="externalLink" target="_top">Context</a> 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 <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> 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 void onSessionCreated​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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> sessionId)</pre> 383<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onSessionActive​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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> sessionId)</pre> 402<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onAdPlaybackStarted​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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> 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> adSessionId)</pre> 422<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onSessionFinished​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> 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> sessionId, 442 boolean automaticTransitionToNextPlayback)</pre> 443<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPositionDiscontinuity​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 463 <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a> oldPosition, 464 <a href="../Player.PositionInfo.html" title="class in com.google.android.exoplayer2">Player.PositionInfo</a> newPosition, 465 <a href="../Player.DiscontinuityReason.html" title="annotation in com.google.android.exoplayer2">@DiscontinuityReason</a> 466 @com.google.android.exoplayer2.Player.DiscontinuityReason int reason)</pre> 467<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoDisabled​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 487 <a href="../decoder/DecoderCounters.html" title="class in com.google.android.exoplayer2.decoder">DecoderCounters</a> decoderCounters)</pre> 488<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onBandwidthEstimate​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 506 int totalLoadTimeMs, 507 long totalBytesLoaded, 508 long bitrateEstimate)</pre> 509<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onDownstreamFormatChanged​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 529 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> mediaLoadData)</pre> 530<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onVideoSizeChanged​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 548 <a href="../video/VideoSize.html" title="class in com.google.android.exoplayer2.video">VideoSize</a> videoSize)</pre> 549<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onLoadError​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 568 <a href="../source/LoadEventInfo.html" title="class in com.google.android.exoplayer2.source">LoadEventInfo</a> loadEventInfo, 569 <a href="../source/MediaLoadData.html" title="class in com.google.android.exoplayer2.source">MediaLoadData</a> 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> error, 571 boolean wasCanceled)</pre> 572<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onPlayerError​(<a href="AnalyticsListener.EventTime.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.EventTime</a> eventTime, 600 <a href="../PlaybackException.html" title="class in com.google.android.exoplayer2">PlaybackException</a> error)</pre> 601<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 void onEvents​(<a href="../Player.html" title="interface in com.google.android.exoplayer2">Player</a> player, 621 <a href="AnalyticsListener.Events.html" title="class in com.google.android.exoplayer2.analytics">AnalyticsListener.Events</a> events)</pre> 622<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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> in interface <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 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: </li> 702<li><a href="#nested.class.summary">Nested</a> | </li> 703<li><a href="#field.summary">Field</a> | </li> 704<li>Constr | </li> 705<li><a href="#method.summary">Method</a></li> 706</ul> 707<ul class="subNavList"> 708<li>Detail: </li> 709<li>Field | </li> 710<li>Constr | </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