Java實現Android設備實時監控
設計思路:
第一,啟動一個實時截圖線程,負責實時截取Android設備屏幕,保存到本地路徑。
第二,在JSP頁面,定義一個img對象,實時更換img對象的src屬性。
這樣,每次截圖線程截取新圖片時會替換掉舊圖而JSP頁面實時讀取新圖。就可以達到實時監控手機界面的效果。
關鍵技術:
這里面的關鍵技術有兩點:
1)ADB截圖命令:在使用adb前,必須要在電腦上安裝adb,具體教程自己百度。這里描述截圖命令:
adb -s cc16cc shell screencap -p /sdcard/liu.png
adb -s cc16cc pull /sdcard/liu.png /usr/local/lib/jian.png
tips:
這里解釋一下這兩句話。這兩句命令是終端執行命令,第一句是讓adb 對設備udid為cc16cc這台設備進行截圖並把圖片保存到sd卡,命名為 liu.png。-s 這個參數是表示后面拼接的參數是設備的udid,cc16cc表示設備的udid,這里每個人根據自己設備的udid來填寫,查詢設備udid的命令是"adb devices"。第二句是adb把sd卡下面的liu.png這張圖推送到電腦/usr/local/lib這個目錄下並命名為jian.png。這樣就完成了一次截圖。
2)JSP頁面實時加載圖片: jsp頁面實時加載圖片,這里說幾個關鍵函數:
setInterval("getScreen();",50) 這個函數的作用是每隔50毫秒執行一次getScreen()這個函數。
function getScreen(){
$(#screenPic).attr("src","<%=basePath%>/resources/screenshot/jian.png?a=Math.random()")
}
tips:
這段代碼的意思是每隔50毫秒去調用一次getScreen()這個函數,getScreen()函數負責替換id=screenPic這個img標簽的src值。寫a=Math.random()是因為一個img對象替換src值后,由於瀏覽器緩存的原因,img對象的圖片並沒有被替換,所以要用這種方式處理。當然, 這個a不是固定的,可以隨意寫。
Java實現iOS設備實時監控
設計思路:
iOS實時監控的設計思路與Android的設計思路是相同的。
關鍵技術:
iOS的實現方式與Android相同,這里的區別在於iOS實時截圖的實現。
1)idevicescreenshot截圖命令:idevicescreenshot -u cc16cc /usr/local/liu.png
idevicescreenshot截圖工具屬於ideviceinstaller,而ideviceinstaller要依賴於libimobiledevice。下面是安裝教程。
a) brew install libimobiledevice
b) brew install -HEAD ideviceinstaller
tips:
iOS實時監控截圖必須在Mac環境下進行,如果在依賴安裝完成后截圖命令出錯可在終端執行"sudo chmod -R 777 /var/db/lockdown/"。截圖命令"idevicescreenshot -u cc16cc /usr/local/liu.png"的意思是把udid為cc16cc這台iphone設備的屏幕截圖並保存到/usr/local/目錄下,命名為liu.png。但是,該截圖命令不支持iOS10設備。