我正在为广播电台开发一个简单的Audio Player应用程序。
我已经成功完成了MediaBrowser
的注册,并注册了一个回调以监听playBack
-或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
}
}
我打电话时收到
playback
更改mediaSession.setPlaybackState(
PlaybackStateCompat.Builder()
.setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE)
.setState(STATE_PLAYING, DEFAULT_PLAYBACK_POSITION, DEFAULT_PLAYBACK_SPEED)
.build()
)
但是,元数据更改没有。
即使我打电话
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()
)
我缺少接收元数据更改的内容吗?
如果有帮助,可以在Github上找到完整的存储库
提前致谢
最佳答案
对于我来说,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
的引用很少,因此可能会丢失和收集它。关于android - 从不调用onMetadataChanged MediaControllerCompat.Callback,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47292459/