OnMetadataChanged MediaControllerCompat.Callback never called

I am developing a simple audio player application for a radio station.
I successfully made MediaBrowserand registered a callback to listen for changes playBack- or metadata.

var mediaBrowser : MediaBrowserCompat by Delegates.notNull()
mediaBrowser = MediaBrowserCompat(
        activity,
        ComponentName(activity, MediaPlaybackService::class.java),
        object : MediaBrowserCompat.ConnectionCallback() {
            override fun onConnected() {
                val mediaController = MediaControllerCompat(activity, mediaBrowser.sessionToken)
                MediaControllerCompat.setMediaController(activity, mediaController)
                mediaController.registerCallback(ControllerCallback)
                mediaControllerFunc()
            }
        },
        null
)

object ControllerCallback : MediaControllerCompat.Callback() {
    override fun onMetadataChanged(metadata: MediaMetadataCompat) {
        //TODO: Never called
    }

    override fun onPlaybackStateChanged(state: PlaybackStateCompat) {
        //Called
    }
}

Changes playBackare accepted when called

mediaSession.setPlaybackState(
    PlaybackStateCompat.Builder()
            .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE)
            .setState(STATE_PLAYING, DEFAULT_PLAYBACK_POSITION, DEFAULT_PLAYBACK_SPEED)
            .build()
)

However, there are no metadata changes.
Although I call

mediaSession.setMetadata(
    MediaMetadataCompat.Builder()
        .putLong(METADATA_KEY_DURATION, -1)
        .putString(METADATA_KEY_TITLE, title)
        .putString(METADATA_KEY_ARTIST, artist)
        .putBitmap(METADATA_KEY_ALBUM_ART, albumCover)
        .putString(METADATA_KEY_ALBUM_ART_URI, albumCoverUrl)
        .build()
)

What am I missing to get metadata changes?
If this helps the complete repository on Github

Thank you in advance

+6
source share
3 answers

My solution is for anyone who is experiencing the same problem.

, compat ( , ) compat ( ) API.

, .
Lollipop , Activity AppCompatActivity.

, -, MediaControllerCompat.Callback onMetadataChanged(), onPlaybackStateChanged().
, ?!

, :

class PlayableActivity : Activity() { ... }

class PlayableActivity : AppCompatActivity() { ... }

+1

onPlaybackStateChanged 26 . . onMetadataChanged onConnected(). Comppat. , onPlaybackStateChanged ExtraCallback, :

  @Override
        public void onPlaybackStateChanged(Object stateObj) {
            MediaControllerCompat.Callback callback = mCallback.get();
            if (callback != null) {
                if (callback.mHasExtraCallback) {
                    // Ignore. ExtraCallback will handle this.
                } else {
                    callback.onPlaybackStateChanged(
                            PlaybackStateCompat.fromPlaybackState(stateObj));
                }
            }
        }

, , ExtraCallback , , .

+1

, MediaControllerCompat, onPlaybackStateChanged(mMediaController.getPlaybackState())

0

All Articles