ViewServer接受hierarchyviewer的命令

AUTOLIST

线程阻塞,命令发送后,会等待viewserver反馈结果。viewserver在检测到界面跳转以后才会回馈结果。

private class WindowChangeMonitor implements Runnable {
		private IDevice device;

		public WindowChangeMonitor(IDevice device) {
			this.device = device;
		}

		public void run() {
			while (!Thread.currentThread().isInterrupted()) {
				DeviceConnection connection = null;
				try {
					connection = new DeviceConnection(this.device);
					connection.sendCommand("AUTOLIST");
					String line;
					while ((!Thread.currentThread().isInterrupted())
							&& ((line = connection.getInputStream().readLine()) != null)) {
						if (line.equalsIgnoreCase("LIST UPDATE")) {
						}
						if (line.equalsIgnoreCase("FOCUS UPDATE")) {
						}
						show(line);
					}
				} catch (IOException e) {
				} finally {
					if (connection != null)
						connection.close();
				}
			}
		}

	}

以上程序运行后,会一直等待,知道界面有跳转。反馈的结果有2种:LIST UPDATE和FOCUS UPATE。输出结果如下:

Appiot----------------LIST UPDATE
Appiot----------------FOCUS UPDATE
Appiot----------------LIST UPDATE
Appiot----------------LIST UPDATE
Appiot----------------LIST UPDATE

一个界面的跳转有一个FOCUS UPDATE事件触发,但是会触发若干LIST UPDATE事件。

GET_FOCUS

得到当前设备上显示的界面的activity。

在刚才代码的基础上,当检测到界面跳转时,获得跳转后的activity.

private class WindowChangeMonitor implements Runnable {
		private IDevice device;

		public WindowChangeMonitor(IDevice device) {
			this.device = device;
		}

		public void run() {
			while (!Thread.currentThread().isInterrupted()) {
				DeviceConnection connection = null;
				try {
					connection = new DeviceConnection(this.device);
					connection.sendCommand("AUTOLIST");
					String line;
					while ((!Thread.currentThread().isInterrupted())
							&& ((line = connection.getInputStream().readLine()) != null)) {
						if (line.equalsIgnoreCase("LIST UPDATE")) {
						}
						if (line.equalsIgnoreCase("FOCUS UPDATE")) {
							getWindowId();
						}
						show(line);
					}
				} catch (IOException e) {
				} finally {
					if (connection != null)
						connection.close();
				}
			}
		}
		public void getWindowId(){
			DeviceConnection connection = null;
			try {
				connection = new DeviceConnection(this.device);
				connection.sendCommand("GET_FOCUS");
				String line;
				while ((!Thread.currentThread().isInterrupted())
						&& ((line = connection.getInputStream().readLine()) != null)) {
					show(line);
				}
			} catch (IOException e) {
			} finally {
				if (connection != null)
					connection.close();
			}
		}
	}

输出结果:

Appiot----------------LIST UPDATE
Appiot----------------42180858 com.sina.weibopro/com.sina.weibopro.DetailWeiboActivity
Appiot----------------FOCUS UPDATE
Appiot----------------LIST UPDATE
Appiot----------------LIST UPDATE
Appiot----------------LIST UPDATE

ViewServer接受hierarchyviewer的命令

时间: 2024-10-28 18:55:41

ViewServer接受hierarchyviewer的命令的相关文章

linux下find(文件查找)命令的详解

文件查找命令locate和find详解 locate 配合数据库缓存,快速查看文件位置,非实时查找( 数据库查找) find 实际搜寻硬盘查询文件名称 ,实时查找 locate简介 locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息.Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件.为了避免这种情况,可以在

Linux 重定向、管道和 tr命令总给

描述:        标准输出(standard output)指的是命令执行所回传的正确的信息 标准输出(standard error output)指的是命令执行失败后所回传的错误信息 Linux 给程序提供三种I/O 设备 标准输入(STDIN )- 0 默认接受来自键盘的输入,使用< 或者 << 标准输出(STDOUT )- 1 默认输出到终端窗口,默认是屏幕,使用> 或者 >> 标准错误输出(STDERR )- 2 默认输出到终端窗口,默认是屏幕,使用2>

Windows phone 8.1应用集成cortana语音命令

微软推出小娜已经有一段时间了,最近恰好在研究其用法,就随便写点记录一下自己的心得. 在研究时参考了@王博_Nick的博客:http://www.cnblogs.com/sonic1abc/p/3868729.html,在此先表示感谢. 闲话不多说,让我们开始吧. 要将语音命令功能添加到应用中需要三个步骤: 1. 创建语音命令定义 (VCD) 文件.这是一个 XML 文档,可以定义在激活应用时用户可说出以启动操作的所有语音命令. 首先向项目中添加一个新的VCD文件, 创建的新文件如下: 以下对各个

烤羊肉串引来的思考——命令模式

夏日的夜晚,大街上总是热闹非凡,人们都喜欢约三五好友去吃烧烤喝啤酒,所谓吃着烤串儿,还唱着歌儿,那感觉就一个字--爽. 在街上溜达,突然发现一个烧烤摊人不多,于是你就上前对老板说:来10串羊肉串,3串鸡翅--.说完之后,你就站在边上等,这时你发现,人越来越多,之间大家七嘴八舌跟老板说自己的要求,明显看到老板有些手足无措.首先老板要记住谁先来的谁后来的,谁给钱了谁没给钱,谁不要放辣椒--等等,太多的问题接踵而至,而且那么多人都在那里盯着老板烤串,这样就引起了挑剔,哪一串多了,哪一串少了什么的,真的

设计模式:学习笔记(3)——命令者式

Java设计模式之命令者式 引入命令模式 案列 比如我们要设计一个DOS命令模拟器,它可以接受输入的命令并做出响应. 0.首先我们的DOS模拟器支持三个大类的功能:文件操作类(FileKit).展示类(DisplayKit).网络类(NetKit). 1.建立抽象命令模板(默认所有的命令都可以使用上述三大类): public abstract class Command { protected DisplayKit displayKit = new DisplayKit(); protected

Unix / 类 Unix shell 中有哪些很酷很冷门很少用很有用的命令?(转)

著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:孙立伟 链接:http://www.zhihu.com/question/20140085/answer/14107336 来源:知乎 这个问题quora上有人提过 What are some lesser known but useful Unix commands? ,已经有不少答案了,我个人已经从这些答案中学到不少,这里我只是照搬过来,然后加上自己的解释. lsof: 列出所有打开的文件.举例:'lsof -p

常用shell命令和vi编辑器

Shell 介绍 Shell:壳(区别于:核) 普通意义上的shell就是可以接受用户输入命令的程序.它之所以被称作shell是因为它隐藏了操作系统低层的细节. Bourne-Again shell(bash):应用非常广泛的一种shell工具,是一个命令处理器,bash也是大多数Linux系统默认的Shell. 常用shell命令 shell 命令的使用 1. mkdir made dirctory 创建文件夹 mkdir 文件夹名称 mkdir img 创建了一个img文件夹 mkdir i

redis 从0 到 1 键值相关命令 服务器相关命令

keys * 获取所有的key   忽略其数据类型 数据为空   返回(empty list or set) keys a* .*b 获取以a开头 或者 以b结尾的key 返回(empty list or set) exists key 判断key是否存在   存在返回1  不存在返回0 del key 删除key   返回 受影响key的个数 expire key seconds  设置key的过期时间 单位为秒 persist  key   消除key的过期时间设置 move key db

Linux中的登录、登出、关机、重启命令

1.1     login:用户登录系统                                                                                                                                 功能描述: 使用login命令可以允许用户登录系统,如果没有参数,登录时提示输入用户密码.如果该用户不是root,且/etc/nologin文件存在,则不允许登录,改文件的内容会被现实在终端上.(su