@DUDU-Meng
Here’s a simple Android Kotlin function that pushes the current metadata (title, artist, station name from FM) into the MediaSession API so it can be broadcast to system components (like the generic widget). As you can see it pushes the station name simply into the Album tag.
import android.content.Context
import android.graphics.Bitmap
import android.media.MediaMetadata
import android.media.session.MediaSession
import android.media.session.PlaybackState
class RadioMediaSession(context: Context) {
private val mediaSession: MediaSession = MediaSession(context, "RadioMediaSession")
init {
mediaSession.setFlags(
MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS or
MediaSession.FLAG_HANDLES_MEDIA_BUTTONS
)
mediaSession.setPlaybackState(
PlaybackState.Builder()
.setActions(
PlaybackState.ACTION_PLAY or
PlaybackState.ACTION_PAUSE or
PlaybackState.ACTION_PLAY_PAUSE
)
.setState(PlaybackState.STATE_PLAYING, 0L, 1f)
.build()
)
mediaSession.isActive = true
}
/**
* Push current radio metadata to the system.
*
* @param title Track title (if available)
* @param artist Artist name (if available)
* @param stationName FM station name
* @param artwork Optional album art or station logo
*/
fun updateMetadata(
title: String?,
artist: String?,
stationName: String?,
artwork: Bitmap? = null
) {
val metadataBuilder = MediaMetadata.Builder()
title?.let { metadataBuilder.putString(MediaMetadata.METADATA_KEY_TITLE, it) }
artist?.let { metadataBuilder.putString(MediaMetadata.METADATA_KEY_ARTIST, it) }
stationName?.let { metadataBuilder.putString(MediaMetadata.METADATA_KEY_ALBUM, it) }
artwork?.let { metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, it) }
mediaSession.setMetadata(metadataBuilder.build())
}
fun release() {
mediaSession.isActive = false
mediaSession.release()
}
}
Off course this is only a skeleton version and the programmers need to use the proper variables from the FM app and the BT AVCRP variables.
EDIT: I updated it to also include the station logo, if available. Again: use the proper variables as the BT stream and the FM app use them.