【Android测试】【随笔】模拟长按电源键
◆版权声明:本文出自胖喵~的博客,转载必须注明出处。
转载请注明出处:http://www.cnblogs.com/by-dream/p/5195121.html
起因
昨天群里看到有人问如何实现一个长按电源键的操作,这个问题经常遇到,而且对于新手来说也比较棘手,于是在尝试成功后,决定说说这个事情。
一般这样的需求都出现在自动化操作的过程中。但是一般的ui自动化貌似对长按操作都支持的不是特别好,即使有也是针对手机屏幕中的区域来进行长按,我们都知道电源键是一个实体键,无法通过点击ui来实现。说道这里估计很多人都想到了KEYCODE(“KEYCODE” 在【Android测试】【第十二节】Uiautomator——API详解 中的Uidevice的API列举中有介绍),没错很多的自动化工具提供了通过KEYCODE来进行点击,但是基本上没有长按这一个操作,于是我们就需要借助Android本身的sendevent来进行输入事件的模拟。
事件注入
Android中的事件注入方式一共有三种:在Monkey源码浅谈的文章中,我们已经介绍过一种事件注入的方法,不过那种方法谷歌的限制比较严格,基本对我们做自动化没什么帮助;第二种是通过内部API的方式,由字面意思可知,只有Android应用程序才可以做到,并且这种方法只在本应用中生效,因此对我们来说也不是特别的理想;还有一种方法就是注入事件到设备/dev/input/eventX,本次我们介绍的sendevent方法,其实就是通过/dev/input/eventX来实现事件模拟的,学会了这个之后就可以做到举一反三,之后所有的点触操作的模拟都可以以此类推。
获得事件
我来说说我是怎么做的。
首先我在手机的shell下输入了getevent命令,这样就可以接收到手机上操作的所有event事件。

这个时候我们按下我们手机电源键,来看看可以接收到哪些事件信息,按下电源键后:

我们得到了以上四条信息。
我们来以第一条为例分析一下获得是什么?
/dev/input/event0: 代表 device
0001 代表一个type
0074 代表power键的code(为16进制)
00000001 代表value 一般 1代表按下,0代表放开。
根据查阅sendevent 需要的参数为就是device、type、code、value。
于是我们就可以通过下面四条命令即可完成按power键的操作,中间sleep的时间长度大于2秒,系统就认为是长按:
sendevent /dev/input/event0 (0074转化为十进制后为116)
sendevent /dev/input/event0
sleep
sendevent /dev/input/event0
sendevent /dev/input/event0
sh脚本
当知道了如何模拟长按电源键之后,那么我们如何用在自动化中呢?这里我打算介绍一下shell脚本
众所周知Android是基于linux内核的,而shell脚本可以运行在linux中,所以我们试试用sh脚本是否可以在Android中运行。
1、完成脚本
因为Android本身内部没有vi,因此我打算在Windows上写好脚本然后导入进去,脚本内容为:
#!/bin/sh sendevent /dev/input/event0
sendevent /dev/input/event0
echo "down"
sleep
sendevent /dev/input/event0
sendevent /dev/input/event0
echo "up"
2、导入手机
这一步不用多说,将脚本名称保存为 "boy.sh",然后使用adb导入手机sd卡。
3、加权限
一般linux系统中,导入的文件可能没有权限,因此我们需要加权限后再运行,于是我做了下面的操作:

运行后提示我没有权限,明明刚才加了权限的,我们来查看一下文件:

仔细一看果然没有加权限成功,怀疑自己刚才是不是打错了,于是又试了一次,还是不行。
最终经过不断的尝试,发现原来是sd卡是无法加权限的,必须要把文件放到 /data/data/的目录下才可以:

终于权限加成功了。
4、运行
权限加成功后,迫不及待的去运行:

还是提示有问题,后来也是不断尝试才知道,原因是手机的启动命令和linux还是有差别,使用下面的启动方法即可:

运行完成之后,观察手机,出现了长按电源键后的效果:

【Android测试】【随笔】模拟长按电源键的更多相关文章
- [置顶] Android4.x对长按电源键(挂断键)和短按电源键(挂断键)的详细处理流程
1. 简介 Android4.x在Framework的PhoneWindowManager对Power(KeyEvent.KEYCODE_POWER)和Home(KeyEvent.KEYCODE_HO ...
- android源码修改,实现长按电源键直接关机
版本:android 4.4.2 源文件路径:frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManage ...
- 【Android测试】【随笔】模拟双指点击
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5258660.html 手势 看到这个标题,很多人会想一想 ...
- 关于一条定制长按Power键弹出Dialog的需求
如题,需要定制长按Power键弹出的Dialog,UI上的大致效果是:全屏,中间下拉按钮“Swipe Down To Power Off”下拉关机,底部左右两侧“Reboot”,“Cancel”按钮, ...
- Ubuntu电源键软关机设置
对于不连接显示器的Ubuntu设备,通过直接拔电源或者长按电源键是普遍的关机方法,但这种方法长期势必会对设备造成损坏. 下面设置电源键软关机(短摁电源按钮关机)的方法可以解决此问题.(默认摁电源键会弹 ...
- 【Android测试】【随笔】性能采集工具——小松鼠诞生记
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4945066.html 起因 去年刚加入TX的时候,我便接手 ...
- Android单元测试与模拟测试详解
测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...
- android中按电源键锁屏然后解锁导致Activity调用onDestory以及如何防止锁屏
今天在android项目中按电源键锁屏,然后解锁,发现子Activity关闭了,回到了主页,这个问题困扰了我很久,最后打log发现,在按电源键的时候,调用了子Activity的onDestroy()方 ...
- 【Android测试】【随笔】获得App的包名和启动页Activity
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5157308.html 前言 经常看到一些刚刚接触Andro ...
随机推荐
- WMS移动仓库管理系统 PDA仓库管理系统
电子仓库管理系统,简称WMS系统,英文名Warehouse Management System,是应用条码和RFID自动识别技术的现代化仓库管理系统,能有效地对仓库流程和空间进行管理,实现批次管理.快 ...
- json学习系列(1)-使用json所要用到的jar包下载
内容来源于互联网. json是个非常重要的数据结构,在web开发中应用十分广泛.每个开发者都应该好好的去研究一下json的底层实现.在使用json之前首先要明白需要哪些jar文件,初次使用的时候很容易 ...
- spring实战三装配bean之Bean的作用域以及初始化和销毁Bean
1.Bean的作用域 所有的spring bean默认都是单例.当容器分配一个Bean时,不论是通过装配还是调用容器的getBean()方法,它总是返回Bean的同一个实例.有时候需要每次请求时都获得 ...
- 简单几何(向量旋转+凸包+多边形面积) UVA 10652 Board Wrapping
题目传送门 题意:告诉若干个矩形的信息,问他们在凸多边形中所占的面积比例 分析:训练指南P272,矩形面积长*宽,只要计算出所有的点,用凸包后再求多边形面积.已知矩形的中心,向量在原点参考点再旋转,角 ...
- ZOJ 3603 DP LCS
已经5年没有做OJ了, 曾经沧海难为水,除去巫山不是云" 准备每周刷1-2题! 题目大意:给出N个字符串,且各个字符串都包含唯一的字母,即不存在"ABCA"(A重复了), ...
- LightOJ1157 LCS Revisited(DP)
题目求两个字符串s1,s2不同的LCS个数. 经典的求LCS的DP是这样的: LCS[i][j]表示s1[0...i]和s2[0...j]的LCS LCS[i][j]从LCS[i-1][j-1]+1( ...
- CodeForces Round 198
总体感觉这次出的题偏数学,数学若菜表示果断被虐.不过看起来由于大家都被虐我2题居然排到331,rating又升了74.Div2-AA. The Walltime limit per test1 sec ...
- HTML5离线应用无法更新的定位与解决
一.些许前提 最近在制作一个Web应用, 其中用到了HTML5的离线应用功能(offline application), 离线应用的概念就不再阐述, 可以查看这两篇文章: http://www.ibm ...
- Ubuntu(Linux) 下 unzip 命令使用详解
1.功能作用:解压缩zip文件 2.位置:/usr/bin/unzip 3.格式用法:unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist ...
- SVN 中trunk、branches、tags
SVN 中trunk.branches.tags 我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录.由于SVN固有的特点,目录在SVN中并没有特别 ...