在 Android 手机、汽车、电视和耳机上通过语音与 Google 助理互动的媒体应用由 Android 媒体会话 API 提供支持,并使用媒体操作。 媒体操作生命周期可能很难理解。即使是简单的“播放搜索结果”请求,也有许多中间步骤可能会出错,如以下简化时间轴所示:
媒体控制器测试 (MCT) 应用可让您在 Android 平台上测试媒体播放的复杂性,并帮助验证您的媒体会话实现。
媒体控制器测试应用有两个版本:
- 客户端应用是在旧版
MediaControllerCompat的基础上实现的。 这样,您就可以测试基于旧版MediaSessionCompat或 Media3MediaSession构建的媒体会话应用,当外部应用通过旧版MediaControllerCompat访问该应用时。在 GitHub 上查找旧版源代码。 - 客户端应用基于最新的 Media3
MediaController实现。这样,您就可以测试基于旧版MediaSessionCompat或 Media3MediaSession构建的媒体会话应用,当外部应用通过 Media3MediaController访问该应用时。在 GitHub 上查找 Media3 版本的源代码。
MCT 会显示应用的 MediaController 相关信息(例如其 PlaybackState 和元数据),并可用于测试应用间媒体控件。
MCT 还包含一个验证测试框架,可让您自动执行 QA 测试。
如需使用 MCT,您的应用必须具有媒体浏览器服务,并且您必须允许 MCT 连接到该服务。如需了解详情,请参阅构建媒体浏览器服务。
启动 MCT
启动 MCT 后,您会看到两个列表:
- 活跃 MediaSession - 启动 MCT 时,此列表最初为空,您会看到消息“未找到任何媒体应用。需要获得通知监听器权限才能扫描活跃的媒体会话。”点击设置,前往权限界面,然后为 MCT 启用权限。
- MediaBrowserService 实现 - 此列表显示了已实现媒体浏览器服务的应用。如果您已实现媒体浏览器服务,您的应用将显示在此列表中,但只有在您已将应用配置为接受所有连接或已将 MCT 列入许可清单的情况下,您才能使用 MCT。如需了解详情,请参阅使用 onGetRoot() 控制客户端连接。
手动测试“电话”应用
如果您允许 MCT 连接到应用的媒体浏览器服务,您的应用会显示在媒体浏览器服务实现列表中。在其中找到该应用,然后点击控制,在后台启动该应用。
否则,您必须先自行在后台启动应用,然后在应用显示在活跃媒体会话列表中时点击控制。
测试准备和播放
当 MCT 开始控制您的应用时,它会显示应用的当前会话元数据:当前所选媒体以及会话准备处理的操作。
MCT 控件页面顶部包含一个下拉菜单,您可以在其中选择搜索、URI、媒体 ID 或无,如果您选择其中一个选项,则可以使用文本字段指定与搜索、URI 或媒体 ID 关联的输入数据。
文本字段正下方的准备和播放按钮会根据您选择的操作执行相应的调用(onPrepare()、onPrepareFromSearch()、onPrepareFromUri()、onPrepareFromMediaId()、onPlay()、onPlayFromSearch()、onPlayFromUri()、onPlayFromMediaId())。
测试音频焦点
一个运行良好的媒体应用应该能够处理音频焦点。您可以通过在应用旁边运行另一个音频应用来测试音频焦点。MCT 控件页面包含一个用于请求和释放音频焦点的按钮。
如需测试音频焦点,请按以下步骤操作:
- 使用音频焦点下拉菜单选择三种时长提示之一:
AUDIOFOCUS_GAIN、AUDIOFOCUS_GAIN_TRANSIENT或AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK。 - 按下按钮即可请求焦点。
- 再次按下该按钮可释放焦点。
测试传输控件
向左滑动即可显示 MCT 的界面视图。此视图具有标准媒体控制器传输按钮,并显示会话的节目图片和数据。已停用的传输按钮会用橙色圈出。所有其他设备均处于活跃状态。
使用传输按钮测试播放器。传输按钮的状态应按预期发生变化。例如,当您按下 PLAY 按钮时,该按钮应变为停用状态,而 PAUSE 和 STOP 按钮应变为启用状态。
再次向左滑动,即可查看显示可选操作的视图。每个操作都有一个控件,用于显示该操作是否处于启用状态。如果该按钮处于启用状态,您可以通过点击它来执行相应操作。
如果您是从具有媒体浏览器服务的应用列表中连接的,则可以再向左滑动两次,以查看可让您在应用的内容层次结构中上下移动或搜索内容树的视图。
手动测试视频应用
使用分屏模式测试视频应用控制器。首先,在一个窗口中打开视频应用,然后在分屏模式下打开 MCT。
运行验证测试
验证测试框架提供了一键式测试,您可以运行这些测试来确保媒体应用正确响应播放请求。
测试“电话”应用
如需访问验证测试,请点击媒体应用旁边的测试按钮。
MCT 状态
下一个视图会显示 MCT 的 MediaController 的详细信息,例如 PlaybackState、元数据和队列。工具栏右上角有两个按钮。左侧的按钮可在可解析日志和格式化日志之间切换。右侧的按钮可刷新视图以显示最新信息。
选择测试
向左滑动即可进入验证测试视图,您可以在其中看到可滚动浏览的可用测试列表。如果测试使用查询(如图 7 所示的“通过搜索播放”测试),则会有一个文本字段用于输入查询字符串。
MCT 包含针对以下媒体操作的测试,并且该项目会不断添加更多测试:
- 播放
- 通过搜索播放
- 通过媒体 ID 播放
- 通过 URI 播放
- 暂停
- 停止
- 跳到下一个
- 跳到上一个
- 跳至队列中的内容
- 跳转到
测试结果
视图底部的结果区域最初是空的。它会在您运行测试时显示结果。例如,如需运行“通过搜索播放”测试,请在文本字段中输入搜索查询,然后点击运行测试。以下屏幕截图显示了成功的测试结果。
测试 Android TV 应用
在 Android TV 上启动 MCT 时,您会看到已安装的媒体应用列表。 请注意,只有实现了媒体浏览器服务的应用才会显示在此列表中。
选择应用后,系统会转到测试界面,右侧会显示验证测试列表。
运行测试时,屏幕左侧会显示所选 MediaController 的相关信息。如需了解详情,请查看 Logcat 中的 MCT 日志。
需要查询的测试会标有键盘图标。点击其中一项测试会打开一个查询输入字段。按 Enter 键运行测试。
为了更轻松地输入文本,您还可以使用 adb 命令:
adb shell input text your-query
您可以使用“%s”在字词之间添加空格。例如,以下命令会将文本“hello world”添加到输入字段。
adb shell input text hello%sworld
构建测试
您可以提交拉取请求,其中包含您认为有用的更多测试。 如需了解如何构建新测试,请访问 MCT GitHub Wiki 并参阅验证测试说明。
如需了解详情,请参阅贡献说明。
其他资源
MCT 旨在与实现媒体 API 的应用结合使用。 如需查看此类应用的示例,请参阅通用 Android 音乐播放器。
我们始终欢迎您提供问题修复和改进建议。请参阅贡献说明。