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 ;
}
分享到:
相关推荐
基于Android水电信息采集系统的构建策略 Android平台的优势分析 Android平台的开放性是其最为显著的优势之一,Android联盟允许任何移动终端厂商加入到开发平台当中,由此使得更多的开发者加入到了Android应用的...
【信息采集系统App(Android)】是一个基于Android Studio开发的移动应用项目,旨在实现全面的信息收集功能,适用于本科毕业设计的实践。这个系统利用了Java编程语言和Android平台的优势,结合了Bomb云数据库来存储...
《基于Android手机的农业环境信息采集系统设计与实现》这篇论文详细探讨了如何利用现代科技手段,特别是Android手机和传感器技术,构建一个低成本、高效能的农业环境信息采集系统。这个系统针对我国以农户为主的小...
标题中的“基于Android手机的农机作业补贴监管信息采集”指的是利用Android智能手机开发一个系统,用于收集和监管农业机械作业的补贴信息。这个系统主要是为了提高农业机械作业补贴的客观性和监管效率。 描述中提到...
2. 多样化的硬件设备支持:Android 支持多种硬件设备和屏幕尺寸,可以运行于手机、平板电脑、电视、手表等多种设备上。 3. 灵活的用户界面:Android 提供了丰富的用户界面控件和布局方式,可以实现漂亮、个性化的...
Android系统的Location API允许开发者获取手机当前连接的基站信息,包括小区识别码(Cell ID)、基站地理位置等。此外,还可以通过监控Logcat日志来获取更详细的网络状态信息。 四、手机信号测试应用 "手机信号测试...
【Android RSS和传感器信息采集工具】是一款专为室内数据采集设计的Android应用程序,它整合了RSS(Really Simple Syndication)信息获取与传感器数据收集两大功能,适用于环境监测、设施管理等多个领域。...
通过USB转232接口,Android手机可以扮演数据采集或控制的角色,弥补了笔记本电脑在便携性上的不足。 **Android USB主机模式(USB Host Mode)** 在Android 3.1及以上版本,系统支持USB主机模式,允许设备作为USB...
《基于Android的基站信息采集系统的设计与实现》这篇论文主要探讨了如何利用Android平台开发一个基站信息采集系统,以解决部分区域因基站位置信息缺失导致的手机定位数据支撑不足的问题。文章介绍了系统的架构和实现...
在Android平台上,HTML5是一种强大的技术,它允许开发者在网页应用中实现许多原生功能,包括获取手机设备信息。这个话题主要涉及如何通过HTML5的Web API与Android系统交互,从而得到诸如设备型号、操作系统版本、...
【基于Android平台的物流信息采集系统】是一种利用Android操作系统开发的物流信息管理工具,旨在提高物流行业的信息收集、处理和传输效率。系统充分利用了Android设备自带的硬件资源,如CMOS摄像头、GPS定位模块,...
关键词中提到了“Android单片机”,这里可能有误,应为“Android手机与单片机”,因为系统是基于Android手机作为控制端,而单片机主要负责数据采集和控制执行。 在硬件设计方面,系统主要包括: - 单片机最小系统:...
"基于Android平台的智慧农业信息采集实验设计与实现" 本文旨在设计和实现基于Android平台的智慧农业信息采集实验,旨在提高物联网专业学生掌握Android物联网开发技能和提高物联网项目的开发及调试能力。实验包括...
【基于Android平台的信息采集与远程显示系统研究】 摘要: 本文主要探讨了如何利用Android平台构建一个信息采集与远程显示系统,特别关注于农业领域的温室环境监控。系统通过JNI接口调用,读取外置温度传感器的数据...
平台的设计思路是在现有养护维修普查信息系统的基础上,增加一个基于Android操作系统的普查信息采集客户端,该普查客户端可以灵活地安装在支持Android应用的手机等便携式移动设备中,并可以和部署在远端Internet上的...
1.android手机连接扫描枪有些手机显示不了系统键盘 2.连接扫描枪使用的是百度输入法,条码是字母数字组合的扫码会出现乱码(如条码:A0011305150081;小米没有键盘的扫描出现:a0011305150081,啊1305150081,等;...
【基于Android平台的汽车售后维修服务信息采集解决方案】 在汽车售后维修服务中,信息的真实性和准确性至关重要。然而,传统的信息采集方式可能存在伪造或篡改的风险,导致产业链协同软件即服务(SaaS)平台中的数据...
2. 多样化的硬件设备支持:Android 支持多种硬件设备和屏幕尺寸,可以运行于手机、平板电脑、电视、手表等多种设备上。 3. 灵活的用户界面:Android 提供了丰富的用户界面控件和布局方式,可以实现漂亮、个性化的...
在Android平台上,获取用户的手机号码和运营商信息是常见的需求,特别是在开发涉及用户认证或个性化服务的应用时。这个毕业设计的源码Demo就是针对这一主题展开的。以下将详细讲解如何在Android中实现这些功能。 ...
【基于Android平台的数字城市信息采集系统的设计与实现】 本文主要探讨的是在Android平台上构建一个数字城市信息采集系统,该系统旨在提升城市管理的效率和水平。随着城市化的快速进程,城市基础设施建设日益完善,...