google / google/ExoPlayer

Use MediaSessionCompat with Exoplayer

Open
#10,394 1 comment 0 reactions 1 assignee Claimed by @marcbaechinger View on GitHub
question
Dominant language
Java
Stars
21.9k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

I am developing app for androidTV.

My application used MediaSessionCompat , and showed a "Now Playing notification [card] tag" as in the picture
https://drive.google.com/drive/folders/1EGxy3rV6bZFdQomnQ5SwoLbABsZ5iFau?usp=sharing

But still rejected by Google Play. Please help me fix this.

My Code:

private fun createMediaSession() {
mSession = MediaSessionCompat(applicationContext, getString(R.string.app_name))
mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
val intent = Intent(getApplicationContext(), MainActivity::class.java)
val pi = PendingIntent.getActivity(applicationContext,99,intent,PendingIntent.FLAG_UPDATE_CURRENT)
mSession.setSessionActivity(pi)
}

private fun updateMetadata(m3UItem : M3UItem){
val metadataBuilder: MediaMetadataCompat.Builder =MediaMetadataCompat.Builder()
metadataBuilder.putString(MediaMetadata.METADATA_KEY_MEDIA_ID,m3UItem.channelID)
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, m3UItem.itemName)
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_SUBTITLE, m3UItem.itemUrl)
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_DESCRIPTION, m3UItem.itemName)
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI, m3UItem.itemIcon)
metadataBuilder.putLong(MediaMetadata.METADATA_KEY_DURATION, SharedPrefs.instance.getPosition().toLong())
metadataBuilder.putString(MediaMetadata.METADATA_KEY_TITLE, m3UItem.itemName)
metadataBuilder.putString(MediaMetadata.METADATA_KEY_ARTIST, m3UItem.itemChannel)
metadataBuilder.putString(METADATA_KEY_MEDIA_URI, m3UItem.itemUrl)

Glide.with(this).asBitmap().load(m3UItem.itemIcon).into(object : SimpleTarget() {
override fun onResourceReady(resource: Bitmap, transition: com.bumptech.glide.request.transition.Transition?) {
metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ART, resource)
mSession.setMetadata(metadataBuilder.build())
mSession.setActive(true)
}

override fun onLoadFailed(errorDrawable: Drawable?) {
val bm : Bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_logo);
metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ART, bm)
mSession.setMetadata(metadataBuilder.build())
mSession.setActive(true)
}
})
}
fun updatePlaybackState() {
val stateBuilder = PlaybackStateCompat.Builder()
.setActions(PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PAUSE)
var state = PlaybackStateCompat.STATE_PLAYING
if (!exoPlay.exoPlayer.isPlaying) {
state = PlaybackStateCompat.STATE_PAUSED
}
stateBuilder.setState(
state,
exoPlay.exoPlayer.currentPosition,
1.0f
)
mSession.setPlaybackState(stateBuilder.build())
}

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.