android 模拟输入,Android开发中如何模拟输入
主要思路是使用 adb shell input指令来模拟按键及触摸输入。
但是前提是需要root,且华为手机出于安全考虑已经停止了root解码。所以测试建议换个别的手机。或是直接用as中的模拟器,用有google apis的版本。
input 指令
我们打开adb,进入shell,输入input可以看到指令的参数说明。
其中source一般都是用的默认值可以忽略,我们主要关注的就是后面的command
text:文本输入;keyevent:键盘按键;这两条指令是所有设备通用的。
tap:点击屏幕;swipe:滑动屏幕;这两条指令适用于有触摸屏的设备。
press,roll适用于有触摸球的设备。
模拟输入
在使用input指令之前我们要先获取一下root权限。
private void execshellcmd(string cmd) {
try {
process process = runtime.getruntime().exec("su");
outputstream outputstream = process.getoutputstream();
dataoutputstream dataoutputstream = new dataoutputstream(
outputstream);
dataoutputstream.writebytes(cmd);
dataoutputstream.flush();
dataoutputstream.close();
outputstream.close();
} catch (throwable t) {
t.printstacktrace();
}
}
text
1.输入之前需要提前获取焦点。
2.输入有特殊含义的特殊字符,无法直接输入 需要使用keyevent 如: ' '
我们整一个edittext,然后进行text输入测试。
execshellcmd("input text 'hello,world'");
我们发现少了一个h,在控制台可以看到日志。
可以看到在按下h的时候,edittext没有获取到焦点。
可能是页面初始化以后就开始执行输入操作,此时edittext还没有获取到焦点,获取焦点可能存在点延时。所以我们尝试延迟1s后进行输入。
private handler handler = new handler();
private runnable task = new runnable() {
public void run() {
execshellcmd("input text 'hello,world'");
}
};
// 延迟1s后输入
handler.postdelayed(task,1000);
keyevent
execshellcmd("input text 'hello,world' \n input keyevent 68 \n input keyevent 21");
输入hello,world,然后输入',然后左移光标
tap
android 中坐标系如下图所示。
我们可以打开手机中的 开发者选项 -> 指针位置 来辅助定位,可以再上方看到x,y相对的偏移量。
点击屏幕(100,200)位置。
execshellcmd("input tap 100 200");
swipe
滑动屏幕和tap相似只需要传入两个坐标即可。后面也可以设置滑动时间(ms),时间越短滑动的相应距离就会越长。
从屏幕(100,200)滑动到(300,400)。
execshellcmd("input swipe 100 200 300 400");
以上就是android开发中如何模拟输入的详细内容,更多关于android 模拟输入的资料请关注萬仟网其它相关文章!
android 模拟输入,Android开发中如何模拟输入相关推荐
- Android短视频开发中的sdk接入方案
目前短视频平台非常火,云豹科技作为优质的app源码提供商,在短视频开发领域有丰富的经验和完善的技术.下面以云豹短视频为例,概述Android短视频开发中的sdk接入方案,这里我们选择腾讯云的sdk进行 ...
- Android Studio安卓开发中使用json来作为网络数据传输格式
如果你是在安卓开发中并且使用android studio,要使用json来作为数据传输的格式,那么下面是我的一些经验. 一开始我在android studio中导入那6个包,那6个包找了非常久,因为放 ...
- Android直播软件开发中接入腾讯IM大概流程是怎样的
现阶段来看,直播软件中的即时通讯是非常重要的一个部分,毕竟直播过程中的交流和沟通是非常重要的,所以在Android直播软件开发时需要接入相关的IM服务. 通常我们选择的即时聊天服务,会选择集成简单方便 ...
- 【Android】iOS开发中xconfig和script脚本的使用
利用Xcode进行开发时需要进行很多build setting的设置以便能让项目按照设置的进行编译,同时有时候需要在编译时利用script脚本进行一些设置,本文主要介绍xconfig文件和script ...
- Android之---项目开发中网络框架的选择
项目开发中网络框架的选择 Android常用的网路框架: 大多数应用程序基本都需要连接网络,发送一些数据给服务端,或者从服务端获取一些数据.通常在 Android 中进行网络连接一般使用 Scoket ...
- 关于在Android音视频开发中,Google API的MediaCodeC与成熟开源编码器X264的应用对比及使用场景
在2019年的一个大项目中,有一个功能模块让笔者感触颇深,那就是实时音视频的预览,当然这不是普通的开开直播,画面出来了就完了那么简单,如果你是一个开发者,那么你肯定知道同样大小的一张图片里,色彩丰富的 ...
- Android升级butterknife,Android组件化开发中使用Butterknife的坑
近来整理代码的时候,要对代码做一些模块化组件化的处理.想要在一个BaseLib里面引入ButterKnife,在这个BaseLib里面声明一个BaseActivty,然后其他module的Activi ...
- Android系统应用开发中涉及的工具使用
文章目录 ~~系统应用卸载的方式(无需root)~~ 应用降级安装的方式 pk8和x509.pem转换为jks adb链接设备 系统应用卸载的方式(无需root) 后来在一些设备上使用时候发现会报错, ...
- Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)
运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.使用录音机录制音频 手机有自带的系统相机,也有自带的系统录音机,只要在调用startActivityForResult之前指定该动作,就会自动 ...
最新文章
- 分布式多层次限流概述
- latin1_swedish_ci gbk_chinese_ci
- NodeJS安全设计:好吃的草莓味糖果,只给好朋友小红
- WebRTC 系列之视频辅流
- 多个ai文件合并成pdf_如何将多个文档合并成PDF?
- 消控中心人员配置_电气火灾监控系统在石药集团新药制剂配套特色原料药FDA生产中心项目...
- php70w-mysql_Centos Apache+PHP5.6/PHP7.0+mysql5.5
- Rabbitmq基本原理和架构
- define和typedef区别
- indoe智能客户端ios_inode客户端证书导入
- phpstuday2018下载
- 写贺卡给毕业师姐怎么写计算机系的,[给师姐的毕业祝福语]对师姐的毕业祝福语...
- [ArcGIS] Python计算Geometrical interval自然间断点 | jenkspy库
- vue3关闭语法检测
- 一步步做一个Google 网页
- iOS视图成像理论及性能优化
- Java线程池原理与实例详解
- EBS 销售RMA接收报错VALIDATE_RMA_LOT_QUANTITIES_ERROR
- 如何用3D技术“复现”遗址?
- nginx启动成功,但是访问不了页面解决办法
热门文章
- CMUSphinx免费离线语音识别开源库教程iOS开发
- Java8获取年、月、周数据和某一天的开始结束时间
- html怎么做一条轴,html实现时间轴_纯css实现响应式竖着/垂直时间抽布局效果
- 阿里内推五面:一面+二面+三面+交叉面+HR面,含答案赠送
- 加速代理游戏,让指定进程走代理网络,驱动级SOCKS5代理使用方法。
- 2021高考成绩查询抖音,2021抖音高考最后倒计时励志句子
- IT孔乙己 (小小说)
- eclipse多行注释 (eclipse开发工具)
- winmail 数据库设置_Windows - 2003下搭建邮件服务器教程和使用 - Winmail - Server - 轻松架设邮件服务器 - 图文...
- 欧拉角速度与角速度的关系推导——欧拉运动方程