使用 Jetpack 画中画库

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

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

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

采用 Jetpack

为了采用 Jetpack 库,请将现有的自定义 PiP 实现替换为 Jetpack 库 API。采用的复杂性和成本将因应用的当前实现情况而异。

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

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

主要区别

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

视频通话

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

主要区别

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

视频播放

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

主要功能

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