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