Java实现Android,iOS设备实时监控
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设备。