使用媒体控制器测试应用

在 Android 手机、汽车、电视和耳机上与 Google 助理进行语音交互的媒体应用,由 Android 媒体会话 API 提供支持,并使用媒体操作。媒体操作生命周期可能难以跟踪。即使是一个简单的搜索播放请求,也有许多中间步骤可能会出错,如简化的时间线所示。

The Media Action Lifecycle

图 1. 媒体操作生命周期

媒体控制器测试 (MCT) 应用可让您测试 Android 上的媒体播放细节,并帮助验证您的媒体会话实现。

媒体控制器测试应用有两个版本:

  • 客户端应用基于旧版 MediaControllerCompat 实现。这允许您测试基于旧版 MediaSessionCompat 或 Media3 MediaSession 构建的媒体会话应用,当外部应用通过旧版 MediaControllerCompat 访问时。可以在 GitHub 上找到旧版源代码
  • 客户端应用基于最新的 Media3 MediaController 实现。这允许您测试基于旧版 MediaSessionCompat 或 Media3 MediaSession 构建的媒体会话应用,当外部应用通过 Media3 MediaController 访问时。可以在 GitHub 上找到Media3 版本源代码

MCT 显示关于您的应用 MediaController 的信息,例如其 PlaybackState 和元数据,并可用于测试应用间的媒体控制。MCT 还包含一个验证测试框架,可让您自动化 QA 测试。

为了使用 MCT,您的应用必须具有媒体浏览器服务,并且必须允许 MCT 连接到该服务。有关详情,请参阅构建媒体浏览器服务

启动 MCT

The MCT Launch Page
图 2. MCT 启动页面

启动 MCT 时,您会看到两个列表:

  • 活动 MediaSession - 启动 MCT 时,此列表最初为空,您会看到消息“未找到媒体应用。需要通知监听器权限才能扫描活动媒体会话。”点击设置以前往权限屏幕,然后为 MCT 启用权限。
  • MediaBrowserService 实现 - 此列表显示已实现媒体浏览器服务的应用。如果您已实现媒体浏览器服务,您的应用将显示在此列表中,但您只有在将应用配置为接受所有连接或将 MCT 列入许可名单后,才能使用 MCT。有关详情,请参阅使用 onGetRoot() 控制客户端连接

手动测试手机应用

如果您允许 MCT 连接到应用的媒体浏览器服务,您的应用会出现在媒体浏览器服务实现列表中。找到该应用并点击控制,以在后台启动您的应用。

否则,您必须先自行在后台启动应用,然后当它出现在活动媒体会话列表中时点击控制

测试准备和播放

MCT 开始控制您的应用时,会显示应用的当前会话元数据:当前选定的媒体以及会话已准备好处理的操作。

The Control Page
图 3. 控制页面

MCT 控制页面的顶部包含一个下拉菜单,您可以在其中选择搜索URI媒体 ID,以及一个文本字段,如果您选择其中一个选项,可以在其中指定与搜索、URI 或媒体 ID 相关的输入数据。

文本字段正下方的准备播放按钮会根据您选择的操作执行相应的调用(onPrepare()onPrepareFromSearch()onPrepareFromUri()onPrepareFromMediaId()onPlay()onPlayFromSearch()onPlayFromUri()onPlayFromMediaId())。

测试音频焦点

良好的媒体应用应能够处理音频焦点。您可以通过与应用同时运行另一个音频应用来测试音频焦点。MCT 控制页面包含一个请求和释放音频焦点的按钮。

要测试音频焦点,请执行以下步骤:

  1. 使用音频焦点下拉菜单选择以下三种持续时间提示之一:AUDIOFOCUS_GAINAUDIOFOCUS_GAIN_TRANSIENTAUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
  2. 按下按钮请求焦点。
  3. 再次按下按钮释放焦点。

测试传输控件

Testing Transport Controls
图 4. 测试传输控件

向左滑动可显示 MCT 的 UI 视图。此视图具有标准媒体控制器传输按钮,并显示会话的节目图片和数据。被禁用的传输按钮用橙色圈出。所有其他按钮都是活动的。

使用传输按钮测试您的播放器。传输按钮的状态应按预期变化。例如,按下“播放”按钮后,它应变为禁用,而“暂停”和“停止”按钮应变为启用。

再次向左滑动可查看显示可选操作的视图。每个操作都有一个控件,显示其是否处于活动状态。如果处于活动状态,您可以点击它来执行该操作。

如果您从具有媒体浏览器服务的应用列表中连接,可以再向左滑动两次,以查看允许您上下浏览应用内容层次结构或搜索内容树的视图。

手动测试视频应用

使用分屏模式测试视频应用控制器。首先,在一个窗口中打开您的视频应用,然后在分屏模式下打开 MCT。

运行验证测试

验证测试框架提供一键式测试,您可以运行这些测试来确保您的媒体应用正确响应播放请求。

测试手机应用

The Test Button
图 5. 测试按钮

要访问验证测试,请点击您的媒体应用旁边的测试按钮。

MCT 状态

The Media Control State
图 6. 媒体控制状态

下一个视图会显示关于 MCT 的 MediaController 的详细信息,例如 PlaybackState、元数据和队列。工具栏右上角有两个按钮。左侧的按钮可在可解析日志和格式化日志之间切换。右侧的按钮会刷新视图以显示最新信息。

选择测试

The Test Selection Page
图 7. 测试选择页面

向左滑动,您会到达验证测试视图,在那里可以看到可用的测试列表(可滚动)。如果测试使用查询,例如图 7 中所示的搜索播放测试,则会有一个文本字段用于输入查询字符串。

MCT 包括对以下媒体操作的测试,并且项目不断添加更多测试:

  • 播放
  • 从搜索播放
  • 从媒体 ID 播放
  • 从 URI 播放
  • 暂停
  • 停止
  • 跳到下一项
  • 跳到上一项
  • 跳到队列项目
  • 定位到

测试结果

A Successful Test Result
图 8. 成功的测试结果

视图底部的结果区域最初为空。运行测试时将显示结果。例如,要运行从搜索播放测试,请在文本字段中输入搜索查询,然后点击运行测试。以下屏幕截图显示了成功的测试结果。

测试 Android TV 应用

在 Android TV 上启动 MCT 时,您会看到已安装媒体应用的列表。请注意,只有实现了媒体浏览器服务的应用才会出现在此列表中。

The MCT Launch Page on TV

图 9. TV 上的 MCT 启动页面

选择应用后,会进入测试屏幕,右侧显示验证测试列表。

The Verification Tests Page on TV

图 10. TV 上的验证测试页面

运行测试时,屏幕左侧会显示有关所选 MediaController 的信息。如需更多详情,请查看 Logcat 中的 MCT 日志。

The Test Information Page on TV

图 11. TV 上的测试信息页面

需要查询的测试标有键盘图标。点击其中一个测试会打开一个用于输入查询的字段。点击Enter 运行测试。

为了更方便地输入文本,您还可以使用 adb 命令:

adb shell input text your-query

您可以使用“%s”在单词之间添加空格。例如,以下命令将文本“hello world”添加到输入字段中。

adb shell input text hello%sworld

构建测试

您可以提交一个 pull request,其中包含您认为有用的更多测试。要了解如何构建新测试,请访问 MCT GitHub Wiki 并查看验证测试说明

请查看贡献说明

其他资源

MCT 旨在与实现媒体 API 的应用结合使用。有关此类应用的示例,请参阅 Universal Android Music Player

欢迎提交 bug 修复和改进。请参阅贡献说明