Since the answer here did not work for me, I will add my working solution in Kotlin.
And also there are lots of methods deprecated since then.
You can track the current track(video) by setting a mediaId when creating your playlist
Gradle:
implementation 'com.google.android.exoplayer:exoplayer:2.14.1'
Layout xml:
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="100dp"
app:show_buffering="when_playing"/>
Code:
private lateinit var exoPlayer: SimpleExoPlayer
private lateinit var playerView: PlayerView
private lateinit var fileList: List<FileModel>
private fun initPlayer() {
playerView = findViewById(R.id.player_view)
playerView.controllerShowTimeoutMs = 0
playerView.cameraDistance = 30F
exoPlayer = SimpleExoPlayer.Builder(this).build()
playerView.player = exoPlayer
setPlaylist()
exoPlayer.prepare()
exoPlayer.seekTo(position, C.TIME_UNSET)
exoPlayer.playWhenReady = true
addPlayerListeners()
}
private fun setPlaylist() {
for ((pos, file) in fileList.withIndex()) {
val mediaItem = MediaItem.Builder().setUri(file.url).setMediaId(pos.toString()).build()
exoPlayer.addMediaItem(mediaItem)
}
}
private fun addPlayerListeners() {
exoPlayer.addListener(object : Player.Listener{
override fun onMediaItemTransition(mediaItem: MediaItem?, reason: Int) {
super.onMediaItemTransition(mediaItem, reason)
val item = mediaItem?.mediaMetadata
val bmp = item?.artworkData
Log.i(TAG, "position = ${mediaItem?.mediaId}")
val currentPos = mediaItem?.mediaId
updateViews(currentPos, bmp)
}
})
}
private fun updateViews(currentPos: String?, bmp: ByteArray?) {
position = currentPos?.toInt() ?: 0
val title = fileList[position].title
textview_title.text = title
if (bmp == null) {
image_view.setImageResource(R.drawable.exo_ic_default_album_image)
return
}
val bitmap = BitmapFactory.decodeByteArray(bmp, 0, bmp.size)
image_view.setImageBitmap(bitmap)
}