1> 建立/断开设备连接
图像采集 和 dump采集 都需要与设备连接后使用,我们通过adb提供的连接了实现,取得Device。
在通过adb与手机建立连接的过程中,我们使用以下的接口:
Device my_getDevice() ;
boolean my_startViewServer(Device device) ;
boolean my_stopViewServer(Device device) ;
其中,端口映射 建立/取消 也在 开启/关闭 的 接口中进行了封装,不再需要手工干预。
package yafeng.test;
import com.android.ddmlib.AndroidDebugBridge;
import com.android.ddmlib.Device;
import com.android.hierarchyviewer.device.DeviceBridge;
public class device_deal {
public static boolean viewServer_started = false ;
public static Device my_getDevice(){
AndroidDebugBridge.terminate();
Device device = null ;
Device[] devices = null;
while(null==devices || 0==devices.length){
System.out.println("rebuilt DeviceBridge connect......");
DeviceBridge.initDebugBridge() ;
devices = DeviceBridge.getDevices() ;
System.out.println("rebuilt DeviceBridge result is : "+devices);
}
device = devices[0] ;
return device ;
}
public static boolean my_startViewServer(Device device){
int port = 0 ;
while(4939!=port){
System.out.println("start forward port to 4939......");
DeviceBridge.setupDeviceForward(device) ;
port = DeviceBridge.getDeviceLocalPort(device) ;
System.out.println("forward result is port : "+port);
}
while(!viewServer_started){
System.out.println("start view server ......") ;
viewServer_started = DeviceBridge.startViewServer(device) ;
System.out.println("start view server result is "+viewServer_started) ;
}
return viewServer_started ;
}
public static boolean my_stopViewServer(Device device){
boolean result ;
result = DeviceBridge.stopViewServer(device) ;
if(false==result){
DeviceBridge.removeDeviceForward(device) ;
}
return result ;
}
}
2> 图像采集
ImageData getDeviceImage(Device mDevice) ;
ImageData 类型封装了我们需要的所有图像信息。其中我们使用其
public byte data[];
属性涵盖了图像的像素矩阵信息。
(320*480像素的图像,其data数组的大小是320*480*3+480 byte),
每个像素由3个色素(红值,绿值和蓝值)构成,且每行行首有1个行标识字节。
我们操作的图像对比就是操作这个data数组,具体的各种对比策略(如何操作这个data)是在详细设计中细化。
public ImageData getDeviceImage(Device mDevice){
RawImage rawImage;
try
{
rawImage = mDevice.getScreenshot();
}
catch(Exception ioe)
{
System.out.println(ioe.getMessage());
return null;
}
if(rawImage == null)
{
return null;
} else
{
PaletteData palette = new PaletteData(65280, 16711680, -16777216);
ImageData imageData = new ImageData(rawImage.width, rawImage.height, rawImage.bpp, palette, 1, rawImage.data);
return imageData ;
}
}
由于图像采集不是很稳定(经常采集到null),所以得重复采集,如果一定次数(20次)后还是采集不到,那么就断开此次设备连接,重新建立连接,再做上述的采集。(当然,如果连接也不是100%成功,也得判断/重复 连接)。
例如:
while(null==imageData ){
imageData = getDeviceImage(device) ;
i++ ;
if(i>=20){
device = device_deal.my_getDevice() ;
i = 0 ;
}
}
3> dump信息采集
ViewNode get_rootView(Device device,Window window) ;
void absolute_compute(ViewNode node) ;
import com.android.hierarchyviewer.device.Window;
import com.android.hierarchyviewer.scene.ViewHierarchyLoader;
import com.android.hierarchyviewer.scene.ViewHierarchyScene;
import com.android.hierarchyviewer.scene.ViewNode;
public ViewNode get_rootView(Device device,Window window){
ViewNode vn = null ;
ViewHierarchyScene vhs = null ;
vhs = ViewHierarchyLoader.loadScene(device,window) ;
if(null!=vhs){
vn = vhs.getRoot() ;
}
return vn ;
}
然后就可以从root组件开始,遍历整个布局/组件信息。以下的例子是一个解析的示例:
public void absolute_compute(ViewNode node){
if( 0!=node.children.size() ){
for(int i=0;i<node.children.size();i++){
absolute_compute( (ViewNode)(node.children.get(i)) ) ;
}
}
int x = node.left;
int y = node.top;
ViewNode p = node.parent;
while (p != null) {
x += p.left - p.scrollX;
y += p.top - p.scrollY;
p = p.parent;
}
System.out.println("the "+node.name+" 's left_top absolute position x:"+x+" and y:"+y+" ,the size is: "+node.width+"*"+node.height+"n") ;
return ;
}
分享到:
相关推荐
使用AndroidStudio开发工具,基于Bomb云数据库,完成的一个信息采集系统,功能齐全可以用作本科毕业设计。
基于Android手机的农机作业补贴监管信息采集.pdf
基于Android手机的农业环境信息采集系统设计与实现.pdf
2. 多样化的硬件设备支持:Android 支持多种硬件设备和屏幕尺寸,可以运行于手机、平板电脑、电视、手表等多种设备上。 3. 灵活的用户界面:Android 提供了丰富的用户界面控件和布局方式,可以实现漂亮、个性化的...
可采集当前手机登录基站数据,一般2G与3G的在手机设置里可以选择。
此Demo为用于室内数据采点搜集数据的Android工具,提供RSS采集,传感器数据采集,采集的数据会根据创建的不同的场景保存在不同的文件目录下,方便管理。
2. 多样化的硬件设备支持:Android 支持多种硬件设备和屏幕尺寸,可以运行于手机、平板电脑、电视、手表等多种设备上。 3. 灵活的用户界面:Android 提供了丰富的用户界面控件和布局方式,可以实现漂亮、个性化的...
本系统应用单片机技术、蓝牙通信技术和Android手机APP开发技术,设计了一种以Android智能手机作为指令传送和数据接收终端,获取实时温湿度信息的系统。 1.蓝牙采用HC-05模块 2.提供了硬件端与手机端的源码。
基于AS开发 的Android采集报错信息程序,显示错误报告,并显示手机信号等信息,一个简单易懂的demo
款基于Android手机的老人跌倒检测系统,该系统能够通过Android手机内置的加速度传感器实时采集人体姿态加速度的信息数据,通过该多阈值法跌倒检测系统实时监测目标用户是否发生跌倒行为。
Android手机的VoIP客户端 Sipdroid.rar Android有未接来电后处理(判断未接来电).rar Android模仿乐淘的应用程序分析源码.zip Android游戏源码——忍者快跑.rar Android自动发送短信.rar Android自动开关机实现.rar ...
本系统应用单片机技术、蓝牙通信技术和Android手机APP开发技术,设计了一种以Android智能手机作为指令传送和数据接收终端,获取实时温湿度信息的系统。 1.蓝牙采用HC-05模块 2.提供了硬件端与手机端的源码。
本系统应用单片机技术、蓝牙通信技术和Android手机APP开发技术,设计了一种以Android智能手机作为指令传送和数据接收终端,获取实时温湿度信息的系统。 1.蓝牙采用HC-05模块 2.提供了硬件端与手机端的源码。
款基于Android手机的老人跌倒检测系统,该系统能够通过Android手机内置的加速度传感器实时采集人体姿态加速度的信息数据,通过该多阈值法跌倒检测系统实时监测目标用户是否发生跌倒行为
sqlserver android 奶牛信息 数据库管理系统
基于安卓手机的环境信息采集传输系统设计与实现.pdf
该脚本是获取android设备信息的脚本,执行该脚本前需要配置adb。
采用Android手机作为采集质量数据的终端为什么会比较适合这些制鞋生产车间员工的使用了?试想,只要手中的智能手机是Android系统的,安装一个产品质量管理信息系统的手机客户端,就可以轻松方便地进行质量信息录入,...
Python 库 android-catcher ,该库的功能主要有对 Android 设备进行 UI自动化测试 和 采集手机性能数据 ,适用于如列表滑动、录制视频等各种测试场景下 CPU、内存、帧率 等信息的捕获,方便后续分析。...
记录温度变化曲线的android程序,单片机采集到温度信息通过蓝牙传输到手机,用到SQLite储存数据,mpchart描绘曲线,可以用于学习蓝牙传输 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,...