画中画 (PiP) Jetpack 库为 Android 应用开发者提供了一个简化的强大 解决方案,用于实现 PiP 功能,尤其适用于 媒体播放、视频通信和导航应用。该库通过提供统一的 API,有助于消除样板代码、常见的应用内 bug,并提高 PiP 用户体验的整体质量。
PiP Jetpack 库通过解决 Android 生态系统中的几个关键挑战和不一致问题,简化了现有的 PiP API:
- 操作系统碎片化:该库会自动处理各种 Android 版本中 PiP API
调用的差异,例如在 Android 12 之前使用
enterPictureInPictureMode,之后使用isAutoEnterEnabled,因此开发者无需管理版本 差异。 - PiP 参数不正确:它提供了一个统一的解决方案,用于正确
设置 PiP 参数(例如
setSourceRectHint),以便在媒体播放期间创建流畅且高质量的动画。 - 统一的 PiP 状态回调:它将
onPictureInPictureModeChanged和onPictureInPictureUiStateChanged合并到一个 统一的回调接口 (PictureInPictureDelegate.OnPictureInPictureEventListener) 中,以简化 状态和界面管理。 - 减少样板代码:该库通过为常见用例(例如播放控件和视频通话操作)提供预定义的
RemoteActions集,减少了重复的 样板代码量。 - 面向未来:通过 Jetpack 库提供更多 PiP 功能,让采用者能够以极少的精力(甚至无需任何精力)访问其他功能。
采用 Jetpack
如需采用 Jetpack 库,请将现有的自定义 PiP 实现替换为 Jetpack 库 API。采用的复杂性和费用将因应用的当前实现而异。
以下各部分介绍了一些典型的 PiP 用例以及必要的实现步骤:
导航
应用会告知库导航的有效或无效状态,并设置宽高比。Jetpack 库会处理其余部分。
主要差异:
- 无需在应用端区分自动进入和旧版进入。
- 合并的回调接口。
- 用于向后兼容的新
PictureInPictureParams构建器。
视频通话
应用会告知库通话的有效或无效状态,并设置宽高比。
主要差异:
- 无需在应用端区分自动进入和旧版进入。
- 合并的回调接口。
- 用于向后兼容的新
PictureInPictureParams构建器。 - 视频通话的标准化操作图标。
视频播放
Jetpack 库提供了播放器委托,您可以集成这些委托来管理 PiP 的启用或停用,并准确设置源矩形提示。
您还可以选择使用一组预定义的 RemoteAction 对象,类似于视频通话场景中使用的对象。
主要特性:
- 处理向后兼容性,无需进行操作系统版本检查。
- 播放状态同步和自动进入控制。
- 使用
SourceRectHint进行持续几何图形跟踪。