本發(fā)明屬于android圖像顯示,具體涉及一種過(guò)濾安卓顯示畫面圖層的方法。
背景技術(shù):
1、無(wú)線投屏作為物聯(lián)網(wǎng)技術(shù)之一,打破了傳統(tǒng)的物理投屏方案,不管是傳輸鏈路搭建,還是視頻流封裝傳遞,無(wú)線投屏都要比傳統(tǒng)投屏更加先進(jìn)。近年來(lái),開(kāi)發(fā)者在安卓系統(tǒng)上進(jìn)行無(wú)線投屏技術(shù)的開(kāi)發(fā)工作也逐漸增多,像視頻會(huì)議,開(kāi)發(fā)辦公以及跨終端共享屏幕內(nèi)容都會(huì)運(yùn)用到無(wú)線投屏技術(shù)。雖然無(wú)線投屏技術(shù)給用戶的使用帶來(lái)很多的便利,但是用戶對(duì)無(wú)線投屏中隱私保護(hù)以及拒絕彈框的需求也越來(lái)越明顯,尤其是會(huì)議場(chǎng)合,在缺少隱私保護(hù)和拒絕彈框功能的情況下進(jìn)行無(wú)線投屏,不僅會(huì)干擾會(huì)議的進(jìn)行與講解,還會(huì)導(dǎo)致個(gè)人敏感信息的曝光。另外,安卓設(shè)備利用虛擬顯示方案進(jìn)行畫面錄屏的時(shí)候,軟件的自動(dòng)彈框會(huì)擋住部分比較重要的內(nèi)容,導(dǎo)致需要錄制的屏幕內(nèi)容被遮掩甚至從彈框內(nèi)容中暴露一些敏感信息,最終導(dǎo)致用戶達(dá)不到自己想要的錄屏效果。
技術(shù)實(shí)現(xiàn)思路
1、鑒于以上存在的問(wèn)題,本發(fā)明提供一種過(guò)濾安卓顯示畫面圖層的方法,有效限制了應(yīng)用自動(dòng)彈窗的行為,還滿足了隱私保護(hù)和拒絕彈框的需求,為用戶在安卓投屏辦公領(lǐng)域提供了更加人性化的功能場(chǎng)景。
2、為解決上述技術(shù)問(wèn)題,本發(fā)明采用如下的技術(shù)方案:
3、一種過(guò)濾安卓顯示畫面圖層的方法,包括以下步驟:
4、顯示器向安卓系統(tǒng)顯示層的硬件合成組件hwc發(fā)送垂直同步信號(hào)vsync,hwc回調(diào)圖元處理服務(wù)端surfaceflinger的同步方法oncomposerhalvsync準(zhǔn)備屏幕顯示內(nèi)容同步;
5、安卓系統(tǒng)收到vsync信號(hào)后,surfaceflinger重新計(jì)算當(dāng)前所有屏幕的顯示內(nèi)容并獲取應(yīng)用顯示窗口創(chuàng)建的圖元傳遞單元surface和surface句柄surfacecontrol;surfaceflinger使用獲取的surface和surfacecontrol去構(gòu)造layer,并將構(gòu)建的layer添加到當(dāng)前系統(tǒng)屏幕z軸layer管理?xiàng)V校?/p>
6、同時(shí)注冊(cè)到屏幕畫面繪制調(diào)度器scheduler中的surfaceflinger在固定間隔時(shí)間生成vsync處理信號(hào)并調(diào)用其信號(hào)處理方法ontransact去通知消息隊(duì)列messagequeue處理屏幕顯示刷新事件,messagequeue回調(diào)surfaceflinger的消息接收函數(shù)onmessagereceived把消息發(fā)送回surfaceflinger;
7、surfaceflinger收到屏幕顯示刷新消息后執(zhí)行屏幕刷新處理函數(shù)onmessagerefresh,刷新處理函數(shù)創(chuàng)建屏幕合成刷新參數(shù)對(duì)象,然后收集當(dāng)前安卓系統(tǒng)所有的繪制數(shù)據(jù)輸出端output并添加到屏幕合成刷新參數(shù)對(duì)象的輸出棧,接著遍歷屏幕z軸layer管理?xiàng)V械乃衛(wèi)ayer并添加到合成刷新參數(shù)對(duì)象的layer棧;當(dāng)需要定向篩選layer時(shí)遍歷屏幕z軸layer管理?xiàng)T?;surfaceflinger把準(zhǔn)備好的圖像顯示數(shù)據(jù)傳遞給圖像合成引擎compositionengine的圖像繪制函數(shù)present;
8、執(zhí)行compositionengine的present時(shí),首先遍歷輸出棧,output調(diào)用準(zhǔn)備函數(shù)prepare并傳入屏幕合成刷新參數(shù),按順序?qū)Ξ?dāng)前output顯示layer元素進(jìn)行繪制和渲染;
9、output對(duì)傳入的layer棧進(jìn)行遍歷,另外屏幕output對(duì)象提供名稱屬性,作為區(qū)分屏幕的標(biāo)志,在整個(gè)遍歷過(guò)程中,都要判斷l(xiāng)ayer和當(dāng)前output的所屬關(guān)系,確認(rèn)layer屬于當(dāng)前屏幕output之后會(huì)對(duì)其進(jìn)行繪制和渲染;當(dāng)需要鎖定屏幕輸出過(guò)濾方案時(shí),output過(guò)濾指定屏幕output的繪制layer;
10、逐一繪制完當(dāng)前系統(tǒng)所有屏幕output顯示內(nèi)容之后,最后通過(guò)hwc將繪制的數(shù)據(jù)合成顯示到對(duì)應(yīng)的屏幕上。
11、一種可能的實(shí)施方式中,所述當(dāng)前所有屏幕中的屏幕包括主屏、副屏和虛擬屏。
12、一種可能的實(shí)施方式中,所述當(dāng)需要定向篩選layer時(shí)遍歷屏幕z軸layer管理?xiàng)T匕ǎ?/p>
13、從屏幕z軸layer管理?xiàng)H〕鰈ayer元素;
14、獲取layer名稱信息,將其與目標(biāo)字符串進(jìn)行比對(duì);
15、layer名稱等于或包含目標(biāo)字段時(shí),不將layer添加到合成刷新參數(shù)對(duì)象的layer棧中并繼續(xù)從屏幕z軸layer管理?xiàng)H〕鰈ayer元素取出下一個(gè)layer元素;
16、將layer添加到合成刷新參數(shù)對(duì)象的layer棧。
17、一種可能的實(shí)施方式中,所述output過(guò)濾指定屏幕output的繪制layer的邏輯包括:
18、比對(duì)屏幕output對(duì)象名稱,如果是需要進(jìn)行l(wèi)ayer過(guò)濾的目標(biāo)屏幕output就進(jìn)行下一步,否則正常進(jìn)行繪制;
19、比對(duì)當(dāng)前需要繪制layer的名稱,如果是需要進(jìn)行過(guò)濾的目標(biāo)layer就不做繪制處理,否則正常進(jìn)行繪制;
20、按照如上步驟,遍歷下一個(gè)layer。
21、采用本發(fā)明具有如下的有益效果:
22、(1)定向性的圖層篩選:messagequeue向surfaceflinger發(fā)送屏幕刷新消息后,surfaceflinger將自動(dòng)執(zhí)行屏幕圖像刷新操作并使用創(chuàng)建的surface和surfacecontrol去構(gòu)造新的layer,接著重新整理當(dāng)前系統(tǒng)屏幕合成刷新內(nèi)容的所有參數(shù),其中包括當(dāng)前系統(tǒng)所有的output、屏幕z軸的所有l(wèi)ayer,當(dāng)surfaceflinger以迭代方式添加layer至屏幕合成刷新layer棧的時(shí)候,通過(guò)比對(duì)layer對(duì)象的名稱屬性,篩選名稱等于或包含目標(biāo)字段的所有l(wèi)ayer,確保它們不被添加到layer棧,讓圖像顯示系統(tǒng)底層無(wú)法繪制篩選出來(lái)的layer,從而實(shí)現(xiàn)當(dāng)前系統(tǒng)所有output上名稱匹配layer一律被隱藏或無(wú)法彈窗的效果。
23、(2)精準(zhǔn)性的輸出過(guò)濾:圖像顯示層會(huì)注冊(cè)當(dāng)前系統(tǒng)所有屏幕output到surfaceflinger,面對(duì)安卓的多屏使用場(chǎng)景,不同的屏幕會(huì)有不一樣的顯示需求,采用layer統(tǒng)一過(guò)濾的方式無(wú)法在指定屏幕上進(jìn)行內(nèi)容屏蔽。surfaceflinger通過(guò)創(chuàng)建屏幕合成刷新參數(shù)對(duì)象來(lái)收集當(dāng)前系統(tǒng)所有output和構(gòu)造layer棧,接著把所有的屏幕合成刷新參數(shù)傳遞給compositionengine,compositionengine首先會(huì)遍歷當(dāng)前系統(tǒng)所有屏幕output,output會(huì)調(diào)用準(zhǔn)備函數(shù)并傳入屏幕合成刷新參數(shù),然后對(duì)layer棧進(jìn)行迭代遍歷。期間可以通過(guò)屏幕output對(duì)象提供的名稱屬性來(lái)確定是否為需要過(guò)濾layer的目標(biāo)屏幕,然后再去匹配名稱等于或包含目標(biāo)字段的所有l(wèi)ayer,當(dāng)匹配到相應(yīng)layer之后,跳過(guò)output對(duì)該layer的繪制處理邏輯,讓目標(biāo)屏幕輸出顯示畫面中不包含需要過(guò)濾layer的繪制內(nèi)容,精準(zhǔn)實(shí)現(xiàn)目標(biāo)屏幕顯示layer過(guò)濾的效果。
24、(3)人性化的功能設(shè)計(jì):傳統(tǒng)投屏技術(shù)普遍采用類似屏幕顯示克隆的方案來(lái)呈現(xiàn),不管是關(guān)鍵性的內(nèi)容,還是相對(duì)敏感的信息,都會(huì)在投屏上一覽無(wú)余。該發(fā)明在安卓系統(tǒng)投屏功能設(shè)計(jì)上,對(duì)屏幕內(nèi)容的定向過(guò)濾可以提升用戶的投屏體驗(yàn),一方面控制了應(yīng)用自動(dòng)彈框的行為,另一方面減少了敏感信息的泄露。系統(tǒng)無(wú)論是以顯示圖像復(fù)制形式進(jìn)行投屏,還是通過(guò)單獨(dú)繪制指定屏幕顯示內(nèi)容進(jìn)行投屏,采用該方案后可以精準(zhǔn)過(guò)濾屏幕上顯示的layer,為用戶提供更加人性化的使用體驗(yàn)。