国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

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

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

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



      背景技術(shù):

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

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

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

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

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



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

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

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

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

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

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

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

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

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

      可選地,還包括:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      進(jìn)一步地,所述裝置還包括:

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

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

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

      附圖說(shuō)明

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

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

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

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

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

      具體實(shí)施方式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1