0

查看MediaController文档,我注意到有一个名为sendCommand(...)的函数,它需要三个参数:

  • 命令:字符串;
  • 参数:捆绑;
  • cb:结果接收器。

但是如何使用该方法的例子却无处可寻


可用的MediaController#sendCommand(...)默认命令和可接受的参数键和值类型是什么?


例如,查看PlaybackState文档,我们可以找到一个常量ACTION_PLAY_FROM_MEDIA_ID,其描述如下:

表示此会话支持从媒体 id 命令播放

这使我们认为可以通过向它发送媒体 IDMediaController#sendCommand(...)来更改它的当前媒体。MediaSession我们该怎么做?
据了解,Google Play Music App 的 MediaController 通过MediaController#getQueue函数共享其 Media Queue。

4

1 回答 1

0

您可以在 MediaControllerCompat 中找到 Commands 常量。

它们实际上是:

public static final String COMMAND_GET_EXTRA_BINDER =
        "android.support.v4.media.session.command.GET_EXTRA_BINDER";

public static final String COMMAND_ADD_QUEUE_ITEM =
        "android.support.v4.media.session.command.ADD_QUEUE_ITEM";

public static final String COMMAND_ADD_QUEUE_ITEM_AT =
        "android.support.v4.media.session.command.ADD_QUEUE_ITEM_AT";

public static final String COMMAND_REMOVE_QUEUE_ITEM =
        "android.support.v4.media.session.command.REMOVE_QUEUE_ITEM";

public static final String COMMAND_REMOVE_QUEUE_ITEM_AT =
        "android.support.v4.media.session.command.REMOVE_QUEUE_ITEM_AT";

public static final String COMMAND_ARGUMENT_MEDIA_DESCRIPTION =
       "android.support.v4.media.session.command.ARGUMENT_MEDIA_DESCRIPTION";

public static final String COMMAND_ARGUMENT_INDEX =
        "android.support.v4.media.session.command.ARGUMENT_INDEX";

对于一些基本的使用示例,您可以查看其方法,例如:

        @Override
    public void removeQueueItem(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_REMOVE_QUEUE_ITEM, params, null);
    }
于 2019-12-29T13:20:00.953 回答