使用 Jetpack 画中画库

画中画 (PiP) Jetpack 库为 Android 应用开发者提供了一个简化的强大 解决方案,用于实现 PiP 功能,尤其适用于 媒体播放、视频通信和导航应用。该库通过提供统一的 API,有助于消除样板代码、常见的应用内 bug,并提高 PiP 用户体验的整体质量。

PiP Jetpack 库通过解决 Android 生态系统中的几个关键挑战和不一致问题,简化了现有的 PiP API:

  • 操作系统碎片化:该库会自动处理各种 Android 版本中 PiP API 调用的差异,例如在 Android 12 之前使用 enterPictureInPictureMode,之后使用 isAutoEnterEnabled,因此开发者无需管理版本 差异。
  • PiP 参数不正确:它提供了一个统一的解决方案,用于正确 设置 PiP 参数(例如 setSourceRectHint),以便在媒体播放期间创建流畅且高质量的动画。
  • 统一的 PiP 状态回调:它将 onPictureInPictureModeChangedonPictureInPictureUiStateChanged 合并到一个 统一的回调接口 (PictureInPictureDelegate.OnPictureInPictureEventListener) 中,以简化 状态和界面管理。
  • 减少样板代码:该库通过为常见用例(例如播放控件和视频通话操作)提供预定义的 RemoteActions 集,减少了重复的 样板代码量。
  • 面向未来:通过 Jetpack 库提供更多 PiP 功能,让采用者能够以极少的精力(甚至无需任何精力)访问其他功能。

采用 Jetpack

如需采用 Jetpack 库,请将现有的自定义 PiP 实现替换为 Jetpack 库 API。采用的复杂性和费用将因应用的当前实现而异。

以下各部分介绍了一些典型的 PiP 用例以及必要的实现步骤:

应用会告知库导航的有效或无效状态,并设置宽高比。Jetpack 库会处理其余部分。

主要差异

  1. 无需在应用端区分自动进入和旧版进入。
  2. 合并的回调接口。
  3. 用于向后兼容的新 PictureInPictureParams 构建器。

视频通话

应用会告知库通话的有效或无效状态,并设置宽高比。

主要差异

  1. 无需在应用端区分自动进入和旧版进入。
  2. 合并的回调接口。
  3. 用于向后兼容的新 PictureInPictureParams 构建器。
  4. 视频通话的标准化操作图标。

视频播放

Jetpack 库提供了播放器委托,您可以集成这些委托来管理 PiP 的启用或停用,并准确设置源矩形提示。 您还可以选择使用一组预定义的 RemoteAction 对象,类似于视频通话场景中使用的对象。

主要特性

  1. 处理向后兼容性,无需进行操作系统版本检查。
  2. 播放状态同步和自动进入控制。
  3. 使用 SourceRectHint 进行持续几何图形跟踪。