构建一个Android视频播放器应用(5/5)

原文地址:https://medium.com/google-developers/building-a-video-player-app-in-android-part-5-5-725c1ec2557a

上一篇文章介绍了为你的应用程序添加Audio Focus支持所需要的步骤,本文将详细介绍如何为应用程序添加画中画的支持。

PIP

画中画是在Android Oreo中被引入的,他允许将Activity最小化为在其他Activity之上的可见的小窗口。你可以设置浮动在屏幕上其他任何位置上的此窗口的方向,下面是示例:
[图片上传失败...(image-bbae0a-1522237827311)]
在Activity中作为画中画启用非常简单。


  
  
  ...

注意,你还可以将另一个属性android:resizeableActivity设置为true,这将使此Activity适用于多窗口模式。

一旦你设置了你的activity支持画中画,那么你必须根据用户的操作使其进入画中画模式,通常,你可以覆盖onUserLeaveHint()方法来在用户点击主页按钮时触发此操作,当用户点击主页按钮时,它将当前activity移动到后台,下面是示例:

override fun onUserLeaveHint() {
        enterPictureInPictureMode(
                with(PictureInPictureParams.Builder()) {
                    val width = 16
                    val height = 9
                    setAspectRatio(Rational(width, height))
                    build()
                })
    }

请注意,当activity最小化时,我们将纵横比设置为16:9,你可以为这个最小化的窗口设置你想要的任何纵横比。
一旦显示视频播放器的activity进入PIP模式,我们会通过以下方法收到通知

override fun onPictureInPictureModeChanged(
  isInPIPMode: Boolean, newConfig: Configuration?) {
    exoplayerview_activity_video.useController = !isInPictureInPictureMode
}

当activity进入或退出PIP模式时,将调用onPictureInPictureChanged()方法,在我们的例子中,我们覆盖了这个方法,并且在activity最小化时隐藏了播放器的控件。PlayerView有一个useController字段,可以将其设置为false以隐藏这些空间,当activity最大化时,我们允许再次显示这些UI控件。

Audio Focus

支持PIP使得集成MediaSession和支持Audio Focus从用户体验的角度来看更加有意义。
当应用程序可以将自己最小化为一个小窗口并在其他应用程序运行时播放媒体时,音频焦点变得非常重要。

考虑这种情况,用户启动视频播放器应用程序并且开始播放视频,然后,将其最小化为PIP窗口,然后启动Youtube,此时,用户可以看到Youtube和视频播放器应用。

  • 当你选择在Youtube中播放视频时,应该在自己的应用程序中暂停播放
  • 当你选择在示例应用程序播放视频时,那么就应该暂停Youtube中的播放。
    而这正是在上一篇文章中使用AudioFocusWrapper类(它为SimpleExoPlayer提供音频焦点支持)时发生的情况。

MediaSession

由于该应用正在使用MediaSession,系统提供控制播放的用户界面,无需编写任何代码,通过此功能,用户可以从PIP窗口轻松播放/暂停/跳过等

你可能感兴趣的:(构建一个Android视频播放器应用(5/5))