原文地址: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中作為畫中畫啟用非常簡單洛波。
<application>
<activity
android:name="com.example.android.videoplayersample.VideoActivity"
android:supportsPictureInPicture="true"
...>
</activity>
...
</application>
注意全肮,你還可以將另一個屬性android:resizeableActivity
設置為true,這將使此Activity適用于多窗口模式匹表。
一旦你設置了你的activity支持畫中畫,那么你必須根據用戶的操作使其進入畫中畫模式驼抹,通常桑孩,你可以覆蓋onUserLeaveHint()方法來在用戶點擊主頁按鈕時觸發(fā)此操作,當用戶點擊主頁按鈕時框冀,它將當前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提供音頻焦點支持)時發(fā)生的情況。
MediaSession
由于該應用正在使用MediaSession翠语,系統(tǒng)提供控制播放的用戶界面叽躯,無需編寫任何代碼,通過此功能肌括,用戶可以從PIP窗口輕松播放/暫停/跳過等