page.title=子母畫面 page.keywords=preview,sdk,PIP,Picture-in-picture page.tags=androidn @jd:body
在 Android N 中,Android TV 使用者現在可以在應用程式內瀏覽時,同時觀賞螢幕角色中釘選視窗中的影片。 子母畫面 (PIP) 模式讓應用程式在釘選視窗中執行影片活動,同時讓另一個活動在背景持續進行。 PIP 視窗讓使用者在使用您的應用程式時同時多工處理,協助提高使用者的生產力。
您的應用程式可決定何時觸發 PIP 模式。以下是一些何時進入 PIP 模式的範例:
PIP 視窗為 240x135 dp,在系統所選的螢幕上四個角落之一的最上層顯示。 使用者只要按住遙控器上的 Home 按鈕,即可帶出 PIP 選單,讓他們將 PIP 視窗切換成全螢幕或關閉 PIP 視窗。 如果另一個影片開始在主畫面上播放,會自動關閉 PIP 視窗。 使用者也可以透過 Recents 關閉 PIP 視窗。
PIP 利用 Android N 中提供的多視窗 API 來提供釘選影片疊加層視窗。 若要將 PIP 新增到您的應用程式,您需要註冊支援 PIP 的活動,在需要時將活動切換到 PIP 模式,以及確定活動在 PIP 模式時會隱藏 UI 元素且影片繼續播放。
根據預設,系統不會自動為應用程式支援 PIP。如果您想要應用程式 PIP,請將
android:supportsPictureInPicture
和
android:resizeableActivity
設定成 true
,在宣示說明中註冊影片活動。
另外也請指定您的活動處理版面配置設定變更,如此一來,在 PIP 模式轉換期間版面配置變更時,才不會重新啟動您的活動。
<activity android:name="VideoActivity" android:resizeableActivity="true" android:supportsPictureInPicture="true" android:configChanges= "screenSize|smallestScreenSize|screenLayout|orientation" ...
註冊您的活動時,請記住在 PIP 模式中,您的活動會顯示在電視螢幕上小的疊加層視窗中。 顯示最少 UI 的影片播放活動可提供最佳的使用者體驗。 包含小型 UI 元素的活動在切換到 PIP 模式時無法提供出色的使用者體驗,因為使用者在 PIP 視窗中看不到 UI 元素的詳細資訊。
Activity.enterPictureInPicture()
。下列範例會在使用者選取媒體控制列上的專用 PIP 按鈕時切換到 PIP 模式:
@Override public void onActionClicked(Action action) { if (action.getId() == R.id.lb_control_picture_in_picture) { getActivity().enterPictureInPicture(); return; } ...
將 PIP 按鈕新增到媒體控制列,可讓您的使用者在控制影片播放時輕鬆地切換到 PIP 模式。
Android N 包含新的
PlaybackControlsRow.PictureInPictureAction
類別,它可定義控制列 PIP 動作和使用 PIP 圖示。
當您的活動進入 PIP 模式時,您的活動應該只播放影片。
在您的活動進入 PIP 時移除 UI 元素,並在您的活動重新進入全螢幕時還原這些元素。覆寫 Activity.onPictureInPictureChanged()
或
Fragment.onPictureInPictureChanged()
並依需要啟用或停用 UI 元素,例如:
@Override public void onPictureInPictureChanged(boolean inPictureInPicture) { if (inPictureInPicture) { // Hide the controls in picture-in-picture mode. ... } else { // Restore the playback UI based on the playback status. ... } }
當您的活動切換到 PIP 時,系統會將活動視為暫停狀態並呼叫您活動的 onPause()
方法。
影片播放不應該暫停,而且活動因為 PIP 模式而暫停時,影片應該繼續播放。
查看您活動的
onPause()
方法中的 PIP 並適當地處理播放,例如:
@Override public void onPause() { // If called due to PIP, do not pause playback if (inPictureInPicture()) { // Continue playback ... } // If paused but not in PIP, pause playback if necessary ... }
當您的活動從 PIP 模式切換回全螢幕模式時,系統會繼續您的活動並呼叫您的 onResume()
方法。
PIP 主要針對播放全螢幕影片的活動。將您的活動切換到 PIP 模式時,避免顯示影片內容以外的任何項目。追蹤當您的活動進入 PIP 模式時隱藏 UI 元素,如處理子母畫面模式中的 UI 中所述。
因為 PIP 視窗會在螢幕角落上以浮動視窗顯示,所以您應該避免在主畫面上 PIP 視窗可能遮蓋的任何地方顯示重要資訊。
當活動處於 PIP 模式時,預設它不會取得輸入焦點。若要在處於 PIP 模式時接收輸入事件,請使用
MediaSession.setMediaButtonReceiver()
。