亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法及裝置與流程

文檔序號:11133644閱讀:1023來源:國知局
安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法及裝置與制造工藝

本發(fā)明涉及移動終端操作系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法及裝置。



背景技術(shù):

隨著移動設(shè)備技術(shù)不斷地發(fā)展和移動終端在人們?nèi)粘I钪械钠占?,人們對移動終端在娛樂性和智能型方面的要求也與日俱增。移動終端的截屏功能,用于獲取系統(tǒng)窗口數(shù)據(jù)的,方便了用戶進行信息的共享,增加了趣味性和娛樂性,越來越受到人們的歡迎。

目前,android系統(tǒng)主要有以下幾種截屏方案:

方案一、通過調(diào)用View.getDrawingCache()。其中,.getDrawingCache是android的view族類的的一個方法,該方法是獲取view的視圖緩存這是最常見的應(yīng)用內(nèi)截屏方法,這個函數(shù)的原理就是通過view的Cache來獲取一個bitmap對象,然后保存成圖片文件。這種截屏方式雖然非常的簡單,但是有很大的局限性,該方法只能對應(yīng)用自身的view來獲取cache,所以只能截取應(yīng)用內(nèi)部的界面,而狀態(tài)欄等應(yīng)用外部的視圖便都無法截取到。并且其對某些view的兼容性也不好,比如web view內(nèi)的內(nèi)容也無法截取。

方案二、讀取屏幕buffer。市場上絕大多數(shù)顯示設(shè)備成像都是通過一塊內(nèi)存進行顯示(這塊內(nèi)存就是所說的顯存),這塊顯存在程序中也稱為屏幕buffer,操作系統(tǒng)將需要成像的像素數(shù)據(jù)拷貝到屏幕buffer來顯示,也就是說通過讀取屏幕buffer就能獲取當(dāng)前屏幕的成像,因為Android是基于linux內(nèi)核,所以能在android中找到屏幕buffer這個設(shè)備,本方案通過讀取/dev/graphics/fb0這個幀緩存文件中的數(shù)據(jù)來獲取屏幕上的內(nèi)容,但是/dev/目錄的讀取權(quán)限是system級的,普通應(yīng)用根本就沒有這個權(quán)限,需要root。

方案三、通過VirtualDisplay接口。VirtualDisplay是android5.0提供的錄屏接口,其使用非常簡單,其缺點也很明顯,只能在android 5.0以上的終端設(shè)備才能使用,而對于目前用戶占大多數(shù)的android 4.+版本的終端設(shè)備則無法使用該接口。



技術(shù)實現(xiàn)要素:

鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法及裝置,本發(fā)明實施例無需進行root操作,即可實現(xiàn)各種版本安卓系統(tǒng)的終端設(shè)備的窗口數(shù)據(jù)的獲取。

本發(fā)明的一個方面,提供了一種安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法,包括:

在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,所述java程序用于在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù);

獲取當(dāng)前應(yīng)用程序的安裝路徑;

通過adb shell命令進入安卓系統(tǒng)的shell模式,在安卓系統(tǒng)的shell模式下根據(jù)所述安裝路徑查找并啟動所述java程序。

可選地,所述存在系統(tǒng)訪問權(quán)限的截屏方法為安卓系統(tǒng)的源碼中的具有隱藏屬性的截屏方法。

可選地,所述在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,包括:

在所述java程序的main方法中創(chuàng)建一個截屏服務(wù),所述截屏服務(wù)用于監(jiān)聽當(dāng)前應(yīng)用程序是否接收到截屏請求,并在獲取到安卓系統(tǒng)窗口數(shù)據(jù)時,將獲取到的安卓系統(tǒng)窗口數(shù)據(jù)傳輸?shù)綄?yīng)的服務(wù)端口。

可選地,還包括:

獲取所述截屏服務(wù)對應(yīng)的服務(wù)端口,并采用adb端口重定向命令將所述服務(wù)端口重定向到PC設(shè)備的預(yù)設(shè)端口,以供所述PC設(shè)備獲取所述安卓系統(tǒng)窗口數(shù)據(jù)并進行顯示。

可選地,所述采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,包括:

根據(jù)所述截屏方法所屬類的類名稱描述符,獲取所述截屏方法所屬的類型對象;

獲取所述截屏方法的輸入?yún)?shù)和方法名稱描述符,根據(jù)所述輸入?yún)?shù)和方法名稱描述符獲取所述截屏方法的對象;

基于所述截屏方法所屬的類型對象以及所述截屏方法的對象,采用Invoke方法調(diào)用所述截屏方法。

可選地,所述根據(jù)所述截屏方法所屬類的類名稱描述符,獲取所述截屏方法所屬的類型對象,包括:

判定當(dāng)前安卓系統(tǒng)的版本信息,根據(jù)所述版本信息確定所述截屏方法所屬類的類名稱描述符;

采用Class類的Class.forName()方法,以根據(jù)所述類名稱描述符獲取所述截屏方法所屬類的類型對象。

可選地,所述根據(jù)所述輸入?yún)?shù)和方法名稱描述符獲取所述截屏方法的對象,包括:

所述輸入?yún)?shù)包括當(dāng)前屏幕的寬度值和高度值;

將所述方法名稱描述符作為第一參數(shù),將所述當(dāng)前屏幕的寬度值和高度值作為第二參數(shù),采用getDeclaredMethod方法獲取所述截屏方法的對象。

可選地,所述在安卓系統(tǒng)的shell模式下根據(jù)所述安裝路徑查找并啟動所述java程序,包括:

在安卓系統(tǒng)的shell模式下調(diào)用app_process命令,以根據(jù)所述安裝路徑查找并啟動所述java程序。

本發(fā)明的另一個方面,提供了一種安卓系統(tǒng)窗口數(shù)據(jù)的獲取裝置,包括:

創(chuàng)建模塊,用于在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,所述java程序用于在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù);

獲取模塊,用于獲取當(dāng)前應(yīng)用程序的安裝路徑;

執(zhí)行模塊,用于通過adb shell命令進入安卓系統(tǒng)的shell模式,在安卓系統(tǒng)的shell模式下根據(jù)所述安裝路徑查找并啟動所述java程序。

可選地,所述創(chuàng)建模塊,具體用于在所述java程序的main方法中創(chuàng)建一個截屏服務(wù),所述截屏服務(wù)用于監(jiān)聽當(dāng)前應(yīng)用程序是否接收到截屏請求,并在獲取到安卓系統(tǒng)窗口數(shù)據(jù)時,將獲取到的安卓系統(tǒng)窗口數(shù)據(jù)傳輸?shù)綄?yīng)的服務(wù)端口;

進一步地,所述裝置還包括:

數(shù)據(jù)共享模塊,用于獲取所述截屏服務(wù)對應(yīng)的服務(wù)端口,并采用adb端口重定向命令將所述服務(wù)端口重定向到PC設(shè)備的預(yù)設(shè)端口,以供所述PC設(shè)備獲取所述安卓系統(tǒng)窗口數(shù)據(jù)并進行顯示。

本發(fā)明實施例提供的安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法及裝置,通過在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,并在安卓系統(tǒng)的shell模式下根據(jù)該應(yīng)用程序的安裝路徑查找并啟動所述java程序,以使該java程序在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù)。本發(fā)明實施例無需進行root操作,即可實現(xiàn)各種版本安卓系統(tǒng)的終端設(shè)備的窗口數(shù)據(jù)的獲取,而且在各種機型的android終端設(shè)備上都能適用,具有更好的適配性。

上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。

附圖說明

通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:

圖1示出了根據(jù)本發(fā)明實施例的一種安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法的流程圖;

圖2示出了根據(jù)本發(fā)明實施例的另一種安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法的流程圖;

圖3示出了根據(jù)本發(fā)明實施例的一種安卓系統(tǒng)窗口數(shù)據(jù)的獲取裝置的結(jié)構(gòu)示意圖;

圖4示出了根據(jù)本發(fā)明實施例的另一種安卓系統(tǒng)窗口數(shù)據(jù)的獲取裝置的結(jié)構(gòu)示意圖。

具體實施方式

下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。

本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個”、“所述”和“該”也可包括復(fù)數(shù)形式。應(yīng)該進一步理解的是,本發(fā)明的說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個或多個其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。

本技術(shù)領(lǐng)域技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(包括技術(shù)術(shù)語和科學(xué)術(shù)語),具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語,應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非被特定定義,否則不會用理想化或過于正式的含義來解釋。

本實施例提供的安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法被配置在終端設(shè)備中,例如,PDA(個人數(shù)字助理,Personal Digital Assistant)、智能手機等各種使用安卓操作系統(tǒng)的電子設(shè)備。下面以智能手機為例,結(jié)合附圖對本申請實施例技術(shù)方案的主要實現(xiàn)原理、具體實施方式及其對應(yīng)能夠達到的有益效果進行詳細的闡述。

圖1示意性示出了本發(fā)明一個實施例的安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法的流程圖。

參照圖1,本發(fā)明實施例的安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法具體包括以下步驟:

步驟S11、在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,所述java程序用于在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù)。

反射是指計算機程序在運行時(Run time)可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力。例如,程序能夠“觀察”并且修改自己的行為。

本發(fā)明實施例中,所述存在系統(tǒng)訪問權(quán)限的截屏方法為安卓系統(tǒng)的源碼中的具有隱藏屬性的截屏方法。

具體的,在安卓系統(tǒng)的源碼中,存在一些系統(tǒng)的隱藏方法,這些方法被標(biāo)記成了隱藏屬性,具體采用“@hide”符號進行標(biāo)記,這些被標(biāo)記成隱藏屬性隱藏方法沒有辦法直接調(diào)用,需要通過反射機制來進行訪問。

本實施例中的截屏方法具體為Surface/SurfaceControl方法。SurfaceControl.screenshot()與Surface.screenshot()是android系統(tǒng)提供的截屏函數(shù)。其中,android api版本大于17采用的是SurfaceControl.screenshot(),android api版本低于17用的是Surface.screenshot()。

在實際應(yīng)用場景中,雖然可以通過反射機制反射到screenshot方法并調(diào)用,但是普通的android應(yīng)用程序根本就沒有調(diào)用screenshot方法的權(quán)限,也無法完成screenshot方法的反射。因此本發(fā)明實施例中,通過創(chuàng)建一個java程序,并將實現(xiàn)截屏的方法放在java程序中,通過java程序調(diào)用screenshot方法。具體的,java程序用于監(jiān)聽當(dāng)前應(yīng)用程序是否接收到截屏請求,并在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,調(diào)用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù)。

由于用于實現(xiàn)截屏方法的java類再android當(dāng)中沒有辦法直接運行,而且其java文件也沒有提供android的運行環(huán)境,因此,為了確保java程序的正常運行,本實施例中通過在應(yīng)用程序中創(chuàng)建能夠?qū)崿F(xiàn)截屏方法的java程序,并將該應(yīng)用程序apk作為java程序的宿主,將java程序碼放入android應(yīng)用代碼中,讓android的apk為其提供運行環(huán)境。

需要說明的是,作為java程序宿主的當(dāng)前應(yīng)用程序可以是新創(chuàng)建的應(yīng)用程序,也可以是當(dāng)前系統(tǒng)中已有的應(yīng)用程序。

進一步地,當(dāng)所述當(dāng)前應(yīng)用程序是新創(chuàng)建的應(yīng)用程序時,所述方法還包括預(yù)先創(chuàng)建應(yīng)用程序,并將該應(yīng)用程序作為java程序的宿主應(yīng)用程序的步驟。

步驟S12、獲取當(dāng)前應(yīng)用程序的安裝路徑。

可理解的,由于本實施例中的java程序是在應(yīng)用程序中創(chuàng)建的,因此當(dāng)前應(yīng)用程序的安裝路徑也即是java程序的路徑。

本實施例中,導(dǎo)出java程序路徑是通過執(zhí)行“export CLASSPATH=”命令來實現(xiàn)的,命令后面接java類的路徑,這里就是當(dāng)前應(yīng)用程序apk包的安裝路徑,在android手機中應(yīng)用的apk包都是安裝在/data/app目錄下,其安裝名字就是應(yīng)用的包名,本實施例中用pkg來指代,所以其完整命令是:

“export CLASSPATH=/data/app/pkg”。

步驟S13、通過adb shell命令進入安卓系統(tǒng)的shell模式,在安卓系統(tǒng)的shell模式下根據(jù)所述安裝路徑查找并啟動所述java程序。

本發(fā)明實施例中,在獲取到當(dāng)前應(yīng)用程序的安裝路徑之后,通過在安卓系統(tǒng)的shell模式下根據(jù)該安裝路徑查找并啟動在當(dāng)前應(yīng)用程序中創(chuàng)建的java程序,以使其在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,獲取安卓系統(tǒng)窗口數(shù)據(jù)。

在實際應(yīng)用場景中,雖然普通的android應(yīng)用程序根本就沒有調(diào)用screenshot方法的權(quán)限,但是,安卓系統(tǒng)的shell模式卻有這個權(quán)限,本發(fā)明實施例可以通過adb shell命令打開android手機的shell模式,進入安卓系統(tǒng)的shell模式,進而在安卓系統(tǒng)的shell模式下根據(jù)所述安裝路徑查找并啟動所述java程序。

本發(fā)明實施例提供的安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法,通過在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,并在安卓系統(tǒng)的shell模式下根據(jù)該應(yīng)用程序的安裝路徑查找并啟動所述java程序,以使該java程序在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù)。本發(fā)明實施例無需進行root操作,即可實現(xiàn)各種版本安卓系統(tǒng)的終端設(shè)備的窗口數(shù)據(jù)的獲取,簡單、有效地實現(xiàn)了各種安卓系統(tǒng)窗口數(shù)據(jù)的獲取,而且在各種機型的android終端設(shè)備上都能適用,具有更好的適配性。

本發(fā)明實施例中,所述步驟S11中的在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,具體通過以下步驟實現(xiàn):在所述java程序的main方法中創(chuàng)建一個截屏服務(wù),所述截屏服務(wù)用于監(jiān)聽當(dāng)前應(yīng)用程序是否接收到截屏請求,并在獲取到安卓系統(tǒng)窗口數(shù)據(jù)時,將獲取到的安卓系統(tǒng)窗口數(shù)據(jù)傳輸?shù)綄?yīng)的服務(wù)端口。

其中,所述截屏請求可以通過PC設(shè)備發(fā)送的http請求實現(xiàn)。具體的,PC設(shè)備可通過瀏覽器來訪問終端設(shè)備的當(dāng)前應(yīng)用。

在一個具體實施例中,在android中實現(xiàn)java程序的創(chuàng)建具體包括:在java程序的類中實現(xiàn)一個靜態(tài)方法,將其命名為main,并在main方法中創(chuàng)建一個截屏服務(wù)。為了簡單快速地實現(xiàn)截屏,可以開啟http服務(wù)作為所述的截屏服務(wù)。在java和android中開啟http服務(wù)的方式有很多,本發(fā)明實施例中可以使用okhttp和AsyncHttpServer實現(xiàn)http服務(wù)的創(chuàng)建,該http服務(wù)用于監(jiān)聽當(dāng)前應(yīng)用程序是否接收到截屏請求,當(dāng)服務(wù)監(jiān)聽到截屏請求時,java程序采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù)就返回其截圖的數(shù)據(jù),并在獲取到安卓系統(tǒng)窗口數(shù)據(jù)時,將獲取到的安卓系統(tǒng)窗口數(shù)據(jù)傳輸?shù)綄?yīng)的服務(wù)端口。

在一個具體示例中,所述截屏請求可以為一個get請求,請求名為screenshot,可理解的是本實施例中的請求名并不是固定的,用戶可在實際使用場景中自己約定,對此本發(fā)明不做具體限定。

在本發(fā)明的一個可選實施例中,如圖2所示,所述安卓系統(tǒng)窗口數(shù)據(jù)的獲取方法還包括步驟S14:

步驟S14、獲取所述截屏服務(wù)對應(yīng)的服務(wù)端口,并采用adb端口重定向命令將所述服務(wù)端口重定向到PC設(shè)備的預(yù)設(shè)端口,以供所述PC設(shè)備獲取所述安卓系統(tǒng)窗口數(shù)據(jù)并進行顯示。

本實施例中,雖然通過adb shell命令開啟了截屏服務(wù),但是該截屏服務(wù)只能通過adb shell命令進行請求訪問,也就是只能在手機上進行內(nèi)部的訪問請求。為了數(shù)據(jù)PC設(shè)備共享窗口數(shù)據(jù),實現(xiàn)android系統(tǒng)的終端設(shè)備與PC設(shè)備的同步顯示,本發(fā)明實施例,通過adb端口重定向命令開啟端口轉(zhuǎn)發(fā)功能。例如本實施例中開啟的截屏服務(wù)的端口是8080,那么需要調(diào)用adb命令“adb forward tcp:8080tcp:8080”,使得PC設(shè)備通過8080端口去訪問該截屏服務(wù),以獲取所述安卓系統(tǒng)窗口數(shù)據(jù)并進行顯示。

本發(fā)明實施例通過端口重定向命令,將截屏服務(wù)對應(yīng)的服務(wù)端口重定向到PC設(shè)備的預(yù)設(shè)端口,以供所述PC設(shè)備獲取所述安卓系統(tǒng)窗口數(shù)據(jù)并進行同步顯示,實現(xiàn)非root情況下,android系統(tǒng)的終端設(shè)備與PC設(shè)備的同步顯示。

本發(fā)明實施例中,所述采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,包括以下附圖中未示出的步驟:

步驟A11、根據(jù)所述截屏方法所屬類的類名稱描述符,獲取所述截屏方法所屬的類型對象。

其中,所述類名稱描述符具體是指該類的字符串名稱。

進一步地,步驟A11中的根據(jù)所述截屏方法所屬類的類名稱描述符,獲取所述截屏方法所屬的類型對象,具體包括:判定當(dāng)前安卓系統(tǒng)的版本信息,根據(jù)所述版本信息確定所述截屏方法所屬類的類名稱描述符;采用Class類的Class.forName()方法,以根據(jù)所述類名稱描述符獲取所述截屏方法所屬類的類型對象。

步驟A12、獲取所述截屏方法的輸入?yún)?shù)和方法名稱描述符,根據(jù)所述輸入?yún)?shù)和方法名稱描述符獲取所述截屏方法的對象。

進一步地,步驟A12中的根據(jù)所述輸入?yún)?shù)和方法名稱描述符獲取所述截屏方法的對象,包括:

所述輸入?yún)?shù)包括當(dāng)前屏幕的寬度值和高度值;將所述方法名稱描述符作為第一參數(shù),將所述當(dāng)前屏幕的寬度值和高度值作為第二參數(shù),采用getDeclaredMethod方法獲取所述截屏方法的對象。

步驟A13、基于所述截屏方法所屬的類型對象以及所述截屏方法的對象,采用Invoke方法調(diào)用所述截屏方法。

本實施例中,由于screenshot方法是類方法所以先要獲取其所屬的類型對象。具體的,可以調(diào)用Class類的forName方法,該方法接受一個類的字符串名稱返回該類的類型對象。在這里需要先判斷當(dāng)前安卓系統(tǒng)的版本,具體的,安卓系統(tǒng)的版本可通過系統(tǒng)函數(shù):Build.VERSION.SDK_INT來讀取,當(dāng)返回值大于17時,得到的字符串名稱就是“android.view.SurfaceControl”,當(dāng)返回值小于17時,得到的字符串名稱是“android.view.Surface”,當(dāng)返回SurfaceControl類/Surface類的類型對象后,需要調(diào)用其getDeclaredMethod方法來反射screenshot方法。getDeclaredMethod方法第一個參數(shù)是screenshot方法的方法名稱描述符,這里就是“screenshot”,第二個參數(shù)是screenshot方法的參數(shù)類型數(shù)組,screenshot方法接受需要截圖的寬、高作為參數(shù),即screenshot方法的參數(shù):終端設(shè)備的屏幕的寬和高,即第二個參數(shù)就是‘new Class[]{Integer.TYPE,Integer.TYPE}’,這樣就返回一個screenshot方法的對象,要想調(diào)用screenshot方法需要再調(diào)用其invoke方法,invoke方法的參數(shù)就是終端設(shè)備的屏幕的寬和高。其中,終端設(shè)備的屏幕的寬、高可以使用android提供的SurfaceControlVirtualDisplayFactory.getCurrentDisplaySize方法來獲取。

本發(fā)明實施例中,所述在安卓系統(tǒng)的shell模式下根據(jù)所述安裝路徑查找并啟動所述java程序,包括:

在安卓系統(tǒng)的shell模式下調(diào)用app_process命令,以根據(jù)所述安裝路徑查找并啟動所述java程序。

由于adb shell命令執(zhí)行的都是命令行程序,而本發(fā)明實施例中的java程序是在一個android應(yīng)用程序中創(chuàng)建的,要想運行該java程序,需要使用app_process命令。其中,app_process命令可以直接在android設(shè)備上執(zhí)行java程序,由于本實施例中的java程序代碼在終端設(shè)備的apk中,所以首先需要設(shè)置app_process執(zhí)行的路徑,路徑設(shè)置后可以直接調(diào)用app_process命令來啟動java程序。具體執(zhí)行的命令為“exec app_process/system/bin pkg.Main'$@'”,該命令表示調(diào)用exec app_process命令,system/bin是其系統(tǒng)bin路徑,pkg.Main指代本實施例中創(chuàng)建的截屏服務(wù)類的全稱。

本發(fā)明實施例在完成截屏服務(wù)的開啟操作之后,僅需要向包含有java程序代碼的應(yīng)用程序發(fā)送截屏請求即可,每次通過adb命令訪問截屏請求時會返回一張終端設(shè)備當(dāng)前的屏幕截圖,這樣只要在PC設(shè)備重復(fù)調(diào)用服務(wù)請求就能源源不斷的獲取終端設(shè)備當(dāng)前的系統(tǒng)窗口數(shù)據(jù),從而達到PC機與手機同步進行顯示的效果。

具體的,循環(huán)發(fā)送可以pc端定義自己的邏輯,比如每隔多少毫秒發(fā)送一次http請求,pc端可以自己針對不同的機型進行設(shè)置,已達到最好的效果,其實電腦端相當(dāng)于服務(wù)的客戶端,實現(xiàn)一個網(wǎng)絡(luò)的客戶端有多種方法,例如可以直接通過瀏覽器來獲取,瀏覽器訪問screenshot請求,然后將獲取的圖像顯示在瀏覽器上。

本發(fā)明實施例提供了一種安卓系統(tǒng)終端設(shè)備與PC設(shè)備在不root的情況下的同屏方案,與現(xiàn)有技術(shù)相比,本技術(shù)方案具有更好的適配性,在各種機型的android手機上都能適用。

對于方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明實施例并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明實施例,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作并不一定是本發(fā)明實施例所必須的。

圖3示意性示出了本發(fā)明一個實施例的安卓系統(tǒng)窗口數(shù)據(jù)的獲取裝置的結(jié)構(gòu)示意圖。

參照圖3,本發(fā)明實施例的安卓系統(tǒng)窗口數(shù)據(jù)的獲取裝置具體包括創(chuàng)建模塊301、獲取模塊302以及執(zhí)行模塊303,其中:

所述的創(chuàng)建模塊301,用于在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,所述java程序用于在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù)。

其中,所述存在系統(tǒng)訪問權(quán)限的截屏方法為安卓系統(tǒng)的源碼中的具有隱藏屬性的截屏方法。

所述的獲取模塊302,用于獲取當(dāng)前應(yīng)用程序的安裝路徑;

所述的執(zhí)行模塊303,用于通過adb shell命令進入安卓系統(tǒng)的shell模式,在安卓系統(tǒng)的shell模式下根據(jù)所述獲取模塊302獲取的安裝路徑查找并啟動所述創(chuàng)建模塊301在當(dāng)前應(yīng)用程序中創(chuàng)建的java程序。

可理解的,由于本實施例中的java程序是在當(dāng)前應(yīng)用程序中創(chuàng)建的,因此當(dāng)前應(yīng)用程序的安裝路徑也即是java程序的路徑。因此,本實施例通過獲取模塊302獲取當(dāng)前應(yīng)用程序的安裝路徑,并在安卓系統(tǒng)的shell模式下根據(jù)該安裝路徑查找并啟動在當(dāng)前應(yīng)用程序中創(chuàng)建的java程序,以使其在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù)。

在本發(fā)明的一個可選實施例中,所述創(chuàng)建模塊301,具體用于在所述java程序的main方法中創(chuàng)建一個截屏服務(wù),所述截屏服務(wù)用于監(jiān)聽當(dāng)前應(yīng)用程序是否接收到截屏請求,并在獲取到安卓系統(tǒng)窗口數(shù)據(jù)時,將獲取到的安卓系統(tǒng)窗口數(shù)據(jù)傳輸?shù)綄?yīng)的服務(wù)端口;

進一步地,如圖4所示,所述安卓系統(tǒng)窗口數(shù)據(jù)的獲取裝置還包括數(shù)據(jù)共享模塊304,所述的數(shù)據(jù)共享模塊304,用于獲取所述截屏服務(wù)對應(yīng)的服務(wù)端口,并采用adb端口重定向命令將所述服務(wù)端口重定向到PC設(shè)備的預(yù)設(shè)端口,以供所述PC設(shè)備獲取所述安卓系統(tǒng)窗口數(shù)據(jù)并進行顯示。

本發(fā)明實施例中,所述的執(zhí)行模塊303,具體用于在安卓系統(tǒng)的shell模式下調(diào)用app_process命令,以根據(jù)所述安裝路徑查找并啟動所述java程序。

進一步地,所述執(zhí)行模塊303,具體通過啟動所述java程序,以使所述java程序執(zhí)行如下操作:根據(jù)所述截屏方法所屬類的類名稱描述符,獲取所述截屏方法所屬的類型對象;獲取所述截屏方法的輸入?yún)?shù)和方法名稱描述符,根據(jù)所述輸入?yún)?shù)和方法名稱描述符獲取所述截屏方法的對象;基于所述截屏方法所屬的類型對象以及所述截屏方法的對象,采用Invoke方法調(diào)用所述截屏方法。

其中,所述根據(jù)所述截屏方法所屬類的類名稱描述符,獲取所述截屏方法所屬的類型對象,包括:判定當(dāng)前安卓系統(tǒng)的版本信息,根據(jù)所述版本信息確定所述截屏方法所屬類的類名稱描述符;采用Class類的Class.forName()方法,以根據(jù)所述類名稱描述符獲取所述截屏方法所屬類的類型對象。

其中,所述根據(jù)所述輸入?yún)?shù)和方法名稱描述符獲取所述截屏方法的對象,包括:所述輸入?yún)?shù)包括當(dāng)前屏幕的寬度值和高度值;將所述方法名稱描述符作為第一參數(shù),將所述當(dāng)前屏幕的寬度值和高度值作為第二參數(shù),采用getDeclaredMethod方法獲取所述截屏方法的對象。

本發(fā)明實施例提供的安卓系統(tǒng)窗口數(shù)據(jù)的獲取裝置,通過創(chuàng)建模塊301在當(dāng)前應(yīng)用程序中創(chuàng)建一個java程序,并使執(zhí)行模塊303在安卓系統(tǒng)的shell模式下根據(jù)該應(yīng)用程序的安裝路徑查找并啟動所述java程序,以使該java程序在監(jiān)聽到當(dāng)前應(yīng)用程序接收到截屏請求時,采用java反射機制訪問存在系統(tǒng)訪問權(quán)限的截屏方法,以獲取安卓系統(tǒng)窗口數(shù)據(jù)。本發(fā)明實施例無需進行root操作,即可實現(xiàn)各種版本安卓系統(tǒng)的終端設(shè)備的窗口數(shù)據(jù)的獲取,而且在各種機型的android終端設(shè)備上都能適用,具有更好的適配性。

在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。

在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。

類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權(quán)利要求書由此明確地并入該具體實施方式,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。

本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。

此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。

本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的網(wǎng)關(guān)、代理服務(wù)器、系統(tǒng)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。

應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1