使用媒体控制器测试应用

在 Android 手机、汽车、电视和耳机上通过语音与 Google 助理互动的媒体应用由 Android Media Session API 提供支持,并使用媒体操作。媒体操作生命周期可能难以跟踪。即使是简单的搜索请求播放,也包含许多中间步骤,其中可能会出错,如简化的时间轴所示:

媒体操作生命周期

图 1. 媒体操作生命周期

借助媒体控制器测试 (MCT) 应用,您可以在 Android 平台上测试媒体播放的复杂性,并帮助验证您的媒体会话实现。

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

  • 客户端应用是在旧版 MediaControllerCompat 之上实现的。这样,当外部应用通过旧版 MediaControllerCompat 访问基于旧版 MediaSessionCompat 或 Media3 MediaSession 构建的媒体会话应用时,您就可以对其进行测试。在 GitHub 上查找旧版的源代码
  • 客户端应用基于最新的 Media3 MediaController 实现。这样,您就可以在外部应用通过 Media3 MediaController 访问基于旧版 MediaSessionCompat 或 Media3 MediaSession 构建的媒体会话应用时,测试该应用。在 GitHub 上查找 Media3 版本的源代码

MCT 会显示应用的 MediaController 的相关信息,例如 PlaybackState 和元数据,并且可用于测试应用间媒体控件。MCT 还包含一个验证测试框架,可让您自动执行质量检查测试。

如需使用 MCT,您的应用必须提供媒体浏览器服务,并且您必须允许 MCT 连接到该服务。如需了解详情,请参阅构建媒体浏览器服务

启动 MCT

MCT 启动页面
图 2. MCT 启动页面

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

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

手动测试手机应用

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

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

测试准备和游戏

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

控制页面
图 3. “控件”页面

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

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

测试音频焦点

行为良好的媒体应用应能够处理音频焦点。您可以通过在您的应用旁边运行其他音频应用来测试音频焦点。MCT 控件页面包含用于请求和释放音频焦点的按钮。

如需测试音频焦点,请按以下步骤操作:

  1. 使用音频焦点下拉菜单,选择三种时长提示之一:AUDIOFOCUS_GAINAUDIOFOCUS_GAIN_TRANSIENTAUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
  2. 按按钮请求获取焦点。
  3. 再次按下该按钮即可取消聚焦。

测试传输控件

测试传输控件
图 4. 测试传输控件

向左滑动以显示 MCT 的界面视图。此视图包含标准媒体控制器传输按钮,并显示会话的节目图片和数据。已停用的传输按钮会用橙色圆圈标记。所有其他设备均处于活跃状态。

使用传输控件测试您的播放器。传输按钮的状态应按预期更改。例如,当您按下“播放”按钮时,该按钮应会停用,而“暂停”和“停止”按钮会启用。

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

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

手动测试视频应用

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

运行验证测试

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

测试手机应用

测试按钮
图 5. 测试按钮

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

MCT 状态

媒体控制状态
图 6. 媒体控制状态

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

选择测试

测试选择页面
图 7. 测试选择页面

向左滑动即可进入验证测试视图,您可以在其中看到可用测试的可滚动列表。如果测试使用查询(例如图 7 中显示的“从搜索结果中播放”测试),则会显示一个文本字段,供您输入查询字符串。

MCT 包含针对以下媒体操作的测试,并且会不断向该项目中添加更多测试:

  • 播放
  • 通过搜索结果播放
  • 根据媒体 ID 播放
  • 通过 URI 播放
  • 暂停
  • 停止
  • 跳至下一个
  • 跳至上一个
  • 跳转到队列项
  • 跳转到

测试结果

成功的测试结果
图 8. 成功的测试结果

视图底部的结果区域最初是空的。当您运行测试时,它会显示结果。例如,如需运行“从搜索启动游戏”测试,请在文本字段中输入搜索查询,然后点击运行测试。以下屏幕截图显示了成功的测试结果。

测试 Android TV 应用

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

电视上的 MCT 启动页面

图 9. 电视上的 MCT 启动页面

选择应用后,您会进入测试界面,该界面会在右侧显示验证测试列表。

电视上的“验证测试”页面

图 10. 电视上的“验证测试”页面

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

电视上的“测试信息”页面

图 11. 电视上的“测试信息”页面

需要查询的测试会带有一个键盘图标。点击其中一个测试即可打开查询的输入字段。点击 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 修复和改进建议。请参阅贡献说明