电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Android 畫中畫模式的實現(xiàn)示例

瀏覽:7日期:2022-09-21 13:13:14
畫中畫支持

Android 8.0(API 級別 26)允許以畫中畫模式啟動 Activity。畫中畫是一種特殊類型的多窗口模式,最常用于視頻播放。使用該模式,用戶可以通過固定到屏幕一角的小窗口觀看視頻,同時在應(yīng)用之間進(jìn)行導(dǎo)航或瀏覽主屏幕上的內(nèi)容。

畫中畫利用 Android 7.0 中的多窗口模式 API 來提供固定的視頻疊加窗口。要將畫中畫添加到您的應(yīng)用中,您需要注冊支持畫中畫的 Activity、根據(jù)需要將 Activity 切換為畫中畫模式,并確保當(dāng) Activity 處于畫中畫模式時,界面元素處于隱藏狀態(tài)且視頻能夠繼續(xù)播放。

畫中畫窗口會顯示在屏幕的最上層,位于系統(tǒng)選擇的一角。您可以將畫中畫窗口拖動到其他位置。當(dāng)您點按該窗口時,會看到兩個特殊的控件:全屏切換開關(guān)(位于窗口的中心)和關(guān)閉按鈕(右上角的“X”)。

您的應(yīng)用會控制當(dāng)前 Activity 在何時進(jìn)入畫中畫模式。以下是一些示例:

Activity 可以在用戶點按主屏幕或最近使用的應(yīng)用按鈕來選擇其他應(yīng)用時,進(jìn)入畫中畫模式。(這就是 Google 地圖在用戶同時運(yùn)行其他 Activity 時繼續(xù)顯示方向的方式。) 您的應(yīng)用可以在用戶從某個視頻返回以瀏覽其他內(nèi)容時,將該視頻切換到畫中畫模式。 您的應(yīng)用可以在用戶觀看到某集內(nèi)容的結(jié)束時將視頻切換到畫中畫模式。主屏幕會顯示有關(guān)這部電視劇下一集的宣傳信息或劇情摘要信息。 您的應(yīng)用可以提供一種方式,讓用戶可以在觀看視頻時將其他內(nèi)容加入播放隊列。當(dāng)主屏幕顯示內(nèi)容選擇 Activity 時,視頻會繼續(xù)以畫中畫模式播放。聲明對畫中畫的支持

默認(rèn)情況下,系統(tǒng)不會自動為應(yīng)用提供畫中畫支持。要想在應(yīng)用中支持畫中畫,您可以通過將 android:supportsPictureInPicture 和 android:resizeableActivity 設(shè)置為 true,在清單中注冊視頻 Activity。此外,指定您的 Activity 會處理布局配置更改,這樣一來,在畫中畫模式轉(zhuǎn)換期間發(fā)生布局更改時,您的 Activity 不會重新啟動。

<activity android:name='VideoActivity' android:resizeableActivity='true' android:supportsPictureInPicture='true' android:configChanges= 'screenSize|smallestScreenSize|screenLayout|orientation' ...將您的 Activity 切換到畫中畫模式

要進(jìn)入畫中畫模式,Activity 必須調(diào)用 enterPictureInPictureMode()。例如,以下代碼會在用戶點擊應(yīng)用界面中的專用按鈕時,將 Activity 切換到畫中畫模式:

@Override public void onActionClicked(Action action) { if (action.getId() == R.id.lb_control_picture_in_picture) { getActivity().enterPictureInPictureMode(); return; } ... }

您可能需要添加將 Activity 切換到畫中畫模式(而不是進(jìn)入后臺)的邏輯。例如,如果用戶在 Google 地圖正在導(dǎo)航時按下主屏幕或最近使用的應(yīng)用按鈕,則該應(yīng)用會切換到畫中畫模式。您可以通過替換 onUserLeaveHint() 來具體了解這種情況:

@Override public void onUserLeaveHint () { if (iWantToBeInPipModeNow()) { enterPictureInPictureMode(); } }在畫中畫期間處理界面

當(dāng) Activity 進(jìn)入或退出畫中畫模式時,系統(tǒng)會調(diào)用 Activity.onPictureInPictureModeChanged() 或 Fragment.onPictureInPictureModeChanged()。

您應(yīng)替換這些回調(diào)以重新繪制 Activity 的界面元素。請注意,在畫中畫模式下,您的 Activity 會在一個小窗口中顯示。在畫中畫模式下,用戶可能看不清小界面元素的詳細(xì)信息,因此不會與這些界面元素互動。界面極簡的視頻播放 Activity 可提供出色的用戶體驗。Activity 應(yīng)僅顯示視頻播放控件。在 Activity 進(jìn)入畫中畫模式之前移除其他界面元素,并在 Activity 再次變?yōu)槿習(xí)r恢復(fù)這些元素:

@Override public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Configuration newConfig) { if (isInPictureInPictureMode) { // Hide the full-screen UI (controls, etc.) while in picture-in-picture mode. } else { // Restore the full-screen UI. ... } }添加控件

畫中畫窗口會在用戶打開窗口菜單(通過點按移動設(shè)備上的窗口或使用電視遙控器選擇菜單)時顯示控件。

如果應(yīng)用有一個活躍的媒體會話,則窗口會顯示播放、暫停、下一個和上一個控件。

您還可以通過在進(jìn)入畫中畫模式之前構(gòu)建 PictureInPictureParams(使用 PictureInPictureParams.Builder.setActions())來明確指定自定義操作,并使用 enterPictureInPictureMode(android.app.PictureInPictureParams) 或 setPictureInPictureParams(android.app.PictureInPictureParams) 在進(jìn)入畫中畫模式時傳遞這些參數(shù)。請注意,如果您嘗試添加的控件數(shù)量超過 getMaxNumPictureInPictureActions(),則系統(tǒng)只會添加上限數(shù)量的控件。

在畫中畫模式下繼續(xù)播放視頻

當(dāng)您的 Activity 切換到畫中畫模式時,系統(tǒng)會將該 Activity 置于暫停狀態(tài)并調(diào)用 Activity 的 onPause() 方法。如果該 Activity 在畫中畫模式下暫停,則視頻播放不得暫停,而應(yīng)繼續(xù)播放。

在 Android 7.0 及更高版本中,當(dāng)系統(tǒng)調(diào)用 Activity 的 onStop() 時,您應(yīng)暫停視頻播放;當(dāng)系統(tǒng)調(diào)用 Activity 的 onStart() 時,您應(yīng)恢復(fù)視頻播放。這樣一來,您就無需在 onPause() 中檢查應(yīng)用是否處于畫中畫模式,只需繼續(xù)播放視頻即可。

如果您必須在 onPause() 實現(xiàn)中暫停播放,請通過調(diào)用 isInPictureInPictureMode() 檢查畫中畫模式并相應(yīng)地處理播放情況,例如:

@Override public void onPause() { // If called while in PIP mode, do not pause playback if (isInPictureInPictureMode()) { // Continue playback ... } else { // Use existing playback logic for paused Activity behavior. ... } }

當(dāng)您的 Activity 從畫中畫模式切換回全屏模式時,系統(tǒng)會恢復(fù)您的 Activity 并調(diào)用 onResume() 方法。

對單個播放 Activity 使用畫中畫模式

在您的應(yīng)用中,用戶可能會在主屏幕上瀏覽內(nèi)容時選擇新的視頻,同時還有一個視頻播放 Activity 正處于畫中畫模式。應(yīng)以全屏模式在現(xiàn)有的播放 Activity 中播放新的視頻,而不是啟動可能會令用戶感到困惑的新 Activity。

要確保將單個 Activity 用于視頻播放請求并根據(jù)需要進(jìn)入或退出畫中畫模式,請在清單中將 Activity 的 android:launchMode 設(shè)置為 singleTask:

<activity android:name='VideoActivity' ... android:supportsPictureInPicture='true' android:launchMode='singleTask' ...

在您的 Activity 中,替換 onNewIntent() 并處理新的視頻,從而根據(jù)需要停止任何現(xiàn)有的視頻播放。

最佳做法

低內(nèi)存設(shè)備可能無法使用畫中畫模式。在應(yīng)用使用畫中畫之前,請務(wù)必通過調(diào)用 hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) 進(jìn)行檢查以確??梢允褂卯嬛挟?。

畫中畫旨在用于播放全屏視頻的 Activity。將 Activity 切換到畫中畫模式時,請避免顯示視頻內(nèi)容以外的任何內(nèi)容。跟蹤您的 Activity 何時進(jìn)入畫中畫模式及隱藏界面元素,如在畫中畫期間處理界面中所述。

由于畫中畫窗口在屏幕的一角顯示為浮動窗口,因此您應(yīng)避免在主屏幕中可能被畫中畫窗口遮蓋的任何區(qū)域內(nèi)顯示重要信息。

當(dāng) Activity 進(jìn)入畫中畫模式后,它默認(rèn)沒有獲得輸入焦點。要在畫中畫模式下接收輸入事件,請使用 MediaSession.setCallback()。如需詳細(xì)了解如何使用 setCallback(),請參閱顯示“正在播放”卡片。

當(dāng)您的應(yīng)用處于畫中畫模式時,畫中畫窗口中的視頻播放可能會對其他應(yīng)用(例如,音樂播放器應(yīng)用或語音搜索應(yīng)用)造成音頻干擾。為避免出現(xiàn)此問題,請在開始播放視頻時請求音頻焦點,并處理音頻焦點更改通知,如管理音頻焦點中所述。如果您在處于畫中畫模式時收到音頻焦點丟失通知,請暫?;蛲V挂曨l播放。

到此這篇關(guān)于Android 畫中畫模式的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Android 畫中畫內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 不锈钢水箱厂家,不锈钢保温水箱-山东桑特供水设备 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 润滑脂-高温润滑脂-轴承润滑脂-食品级润滑油-索科润滑油脂厂家 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 合肥注册公司|合肥代办营业执照、2024注册公司流程 | 比士亚-专业恒温恒湿酒窖,酒柜,雪茄柜的设计定制 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器| 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | 【中联邦】增稠剂_增稠粉_水性增稠剂_涂料增稠剂_工业增稠剂生产厂家 | 煤棒机_增碳剂颗粒机_活性炭颗粒机_木炭粉成型机-巩义市老城振华机械厂 | 据信,上课带着跳 D 体验-别样的课堂刺激感受引发网友热议 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 工业CT-无锡璟能智能仪器有限公司 | 电销卡_北京电销卡_包月电话卡-豪付网络| 密封圈_泛塞封_格莱圈-[东莞市国昊密封圈科技有限公司]专注密封圈定制生产厂家 | 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 | 食品无尘净化车间,食品罐装净化车间,净化车间配套风淋室-青岛旭恒洁净技术有限公司 | 汝成内控-行政事业单位内部控制管理服务商 | 十二星座查询(性格特点分析、星座运势解读) - 玄米星座网 | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 天品互联-北京APP开发公司-小程序开发制作-软件开发 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | BOE画框屏-触摸一体机-触控查询一体机-触摸屏一体机价格-厂家直销-触发电子 | 山东钢衬塑罐_管道_反应釜厂家-淄博富邦滚塑防腐设备科技有限公司 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 肉嫩度仪-凝胶测试仪-国产质构仪-气味分析仪-上海保圣实业发展有限公司|总部 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-沼河浸过滤器 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 |