我正在尝试创建一个Podcast播放器。因此,请遵循Android Universal Media Player源代码。我面临的问题是,我不提前知道自己的播放列表,并且播放列表的创建取决于用户的互动。所以我需要从我的活动/片段中添加/删除媒体项目。我的代码非常类似于UMP示例应用程序,我还修改了MusicService的mediaSession
来自
// Create a new MediaSession.
mediaSession = MediaSessionCompat(this, "MusicService")
.apply {
setSessionActivity(sessionActivityPendingIntent)
isActive = true
}
to
// Create a new MediaSession.
mediaSession = MediaSessionCompat(this, "MusicService")
.apply {
setSessionActivity(sessionActivityPendingIntent)
isActive = true
setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS
or MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS
or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
}
而且我正尝试将项目添加到队列中,如下所示
fun addRandomMedia() {
if (mediaSessionConnection.isConnected.value == true) {
val mediaDescription = MediaDescriptionCompat.Builder()
.setMediaId("wake_up_01")
.setTitle("Intro - The Way Of Waking Up (feat. Alan Watts)")
.setMediaUri(Uri.parse("https://storage.googleapis.com/uamp/The_Kyoto_Connection_-_Wake_Up/01_-_Intro_-_The_Way_Of_Waking_Up_feat_Alan_Watts.mp3"))
.build()
mediaSessionConnection.mediaController.addQueueItem(mediaDescription)
}
}
但是我总是在例外情况下得到这个]
Process: com.example.android.uamp.next, PID: 8446 java.lang.UnsupportedOperationException: This session doesn't support queue management operations at android.support.v4.media.session.MediaControllerCompat$MediaControllerImplApi21.addQueueItem(MediaControllerCompat.java:1988) at android.support.v4.media.session.MediaControllerCompat.addQueueItem(MediaControllerCompat.java:316) at com.example.android.uamp.viewmodels.MainActivityViewModel.addItemToQueue(MainActivityViewModel.kt:118) at com.example.android.uamp.MainActivity$onCreate$3.onClick(MainActivity.kt:68) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
这里是addQueueItem代码形式支持v4媒体包
@Override public void addQueueItem(MediaDescriptionCompat description) { long flags = getFlags(); if ((flags & MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS) == 0) { throw new UnsupportedOperationException( "This session doesn't support queue management operations"); } Bundle params = new Bundle(); params.putParcelable(COMMAND_ARGUMENT_MEDIA_DESCRIPTION, description); sendCommand(COMMAND_ADD_QUEUE_ITEM, params, null); }
所以,我觉得getFlags方法肯定有问题,或者我在这里遗漏了一些东西,因为if检查始终为true。
为了重现此问题,我分叉了示例,并将上述代码添加到了应用程序中。这是完整的代码链接Here is the code to reproduce
我正在尝试创建一个Podcast播放器。因此,请遵循Android Universal Media Player源代码。我面临的问题是,我提前不知道我的播放列表,并且播放列表的创建是...
您使用MediaSessionConnector吗?问题是在MediaSessionConnector的构造函数中标记被覆盖。因此,创建MediaSessionConnector实例后,您需要调用mediaSession.setFlags(flags)。