在 Android 手机、汽车、电视和耳机上通过语音与 Google 助理互动的媒体应用由 Android Media Session API 提供支持,并使用媒体操作。媒体操作生命周期可能难以跟踪。即使是简单的搜索请求播放,也包含许多中间步骤,其中可能会出错,如简化的时间轴所示:
借助媒体控制器测试 (MCT) 应用,您可以在 Android 平台上测试媒体播放的复杂性,并帮助验证您的媒体会话实现。
“媒体控制器测试”应用有两个版本:
- 客户端应用是在旧版
MediaControllerCompat
之上实现的。这样,当外部应用通过旧版MediaControllerCompat
访问基于旧版MediaSessionCompat
或 Media3MediaSession
构建的媒体会话应用时,您就可以对其进行测试。在 GitHub 上查找旧版的源代码。 - 客户端应用基于最新的 Media3
MediaController
实现。这样,您就可以在外部应用通过 Media3MediaController
访问基于旧版MediaSessionCompat
或 Media3MediaSession
构建的媒体会话应用时,测试该应用。在 GitHub 上查找 Media3 版本的源代码。
MCT 会显示应用的 MediaController
的相关信息,例如 PlaybackState
和元数据,并且可用于测试应用间媒体控件。MCT 还包含一个验证测试框架,可让您自动执行质量检查测试。
如需使用 MCT,您的应用必须提供媒体浏览器服务,并且您必须允许 MCT 连接到该服务。如需了解详情,请参阅构建媒体浏览器服务。
启动 MCT

启动 MCT 后,您会看到两个列表:
- 活跃的 MediaSession - 当您启动 MCT 时,此列表最初是空的,并且您会看到“未找到任何媒体应用。必须获得通知监听器权限才能扫描活跃的媒体会话。”点击设置,前往权限屏幕,然后为 MCT 启用权限。
- MediaBrowserService 实现 - 此列表显示了已实现媒体浏览器服务的应用。 如果您已实现媒体浏览器服务,您的应用将显示在此列表中,但只有在您将应用配置为接受所有连接或将 MCT 列入许可名单后,才能使用 MCT。如需了解详情,请参阅使用 onGetRoot() 控制客户端连接。
手动测试手机应用
如果您允许 MCT 连接到应用的媒体浏览器服务,您的应用会显示在媒体浏览器服务列表实现列表中。在其中找到该应用,然后点击控制以在后台启动该应用。
否则,您必须先自行在后台启动应用,然后在应用显示在活跃媒体会话列表中时点击控制。
测试准备和游戏
当 MCT 开始控制您的应用时,它会显示应用的当前会话元数据:当前选择的媒体以及会话准备处理的操作。

MCT 控件页面顶部包含一个下拉菜单,您可以在其中选择搜索、URI、媒体 ID 或无,以及一个文本字段,用于指定与搜索、URI 或媒体 ID 相关联的输入数据(如果您选择其中一个选项)。
文本字段下方的 Prepare 和 Play 按钮会根据您选择的操作执行相应的调用(onPrepare()
、onPrepareFromSearch()
、onPrepareFromUri()
、onPrepareFromMediaId()
、onPlay()
、onPlayFromSearch()
、onPlayFromUri()
、onPlayFromMediaId()
)。
测试音频焦点
行为良好的媒体应用应能够处理音频焦点。您可以通过在您的应用旁边运行其他音频应用来测试音频焦点。MCT 控件页面包含用于请求和释放音频焦点的按钮。
如需测试音频焦点,请按以下步骤操作:
- 使用音频焦点下拉菜单,选择三种时长提示之一:
AUDIOFOCUS_GAIN
、AUDIOFOCUS_GAIN_TRANSIENT
或AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
。 - 按按钮请求获取焦点。
- 再次按下该按钮即可取消聚焦。
测试传输控件

向左滑动以显示 MCT 的界面视图。此视图包含标准媒体控制器传输按钮,并显示会话的节目图片和数据。已停用的传输按钮会用橙色圆圈标记。所有其他设备均处于活跃状态。
使用传输控件测试您的播放器。传输按钮的状态应按预期更改。例如,当您按下“播放”按钮时,该按钮应会停用,而“暂停”和“停止”按钮会启用。
再次向左滑动,即可看到显示可选操作的视图。每个操作都有一个控件,用于显示其是否处于活动状态。如果该操作处于活动状态,您可以点击该操作来执行相应操作。
如果您是从包含媒体浏览器服务的应用列表中连接的,则可以再向左滑动两次,以查看可让您上下浏览应用的内容层次结构或搜索内容树的视图。
手动测试视频应用
使用分屏模式测试视频应用控制器。首先,在一个窗口中打开视频应用,然后在分屏模式下打开 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 的应用结合使用。如需查看此类应用的示例,请参阅 Universal Android Music Player。
我们衷心欢迎您提供 bug 修复和改进建议。请参阅贡献说明。