Use MediaSessionCompat with Exoplayer
- 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
Assessment
This issue has not been assessed yet.