android 中用代码模拟发送按键

有时候在代码中需要模拟一些用户操作的按键,例如TV 中遥控器的按键,一些测试脚本的编写。再比如android 手机中虚拟按键,以及悬浮窗中的返回功能,等等。都是模拟发送按键来操作。

这里介绍三种方法,来实现用代码模拟发送按键。目前我都是在系统中(有系统签名和shareuid)测试的。不知道如果第三方app想要调用使用。不知权限是否够

1.调用input 命令

使用过串口的都明白,如果需要debug 模拟按键,会使用input keyevent 的方法。这个使用android runtime 模拟执行命令

try{            String keyCommand = "input keyevent " + KeyEvent.KEYCODE_1;            Runtime runtime = Runtime.getRuntime();            Process proc = runtime.exec(keyCommand);} catch(IOException e){}
2.在线程中使用Instrumentation

这个方法必须要在线程中执行才有效

Instrumentation mInst = new Instrumentation();mInst.sendKeyDownUpSync(KeyEvent.KEYCODE_1);
3.调用InputManager api(android 系统虚拟按键就是使用这种方法)

InputManager.getInstance().injectInputEvent 为隐藏方法,如果不是在系统中使用,则需要使用反射,或者将源码导入app,使其编译不报错。

long now = SystemClock.uptimeMillis();KeyEvent down = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_1, 0);InputManager.getInstance().injectInputEvent(down, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);KeyEvent up = new KeyEvent(now, now, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_1, 0);InputManager.getInstance().injectInputEvent(up, InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);

更多相关文章

  1. 在 SQL 数据库中保存数据
  2. Android使用ViewPager实现图片轮播(高度自适应,左右循环,自动轮播)
  3. 【Android】Java回调原理并结合Android源码进行理解
  4. 为Android、iOS设备搭建模拟丢包、慢速网络模拟环境
  5. Android中使用WebView与JS交互全解析
  6. 第二行代码学习笔记——第二章(2)
  7. 针对Android(安卓)模拟器启动慢的问题,长时间显示 Android(安卓)L
  8. Android重温--触屏事件
  9. MediaButtonReceiver---独特的媒体广播接收器

随机推荐

  1. 指导我优化我的PHP代码,用数组中的空数据
  2. 如何捕获PHP类型暗示的“可捕获的致命错
  3. thinkPHP3.2.3完整版 在sae上面的部署
  4. 在LINUX下安装PHP、APACHE、MYSQL无法成
  5. 使用php和jquery进行验证码动态更新
  6. thinkphp关闭调试模式后URL大小写问题
  7. thinkphp5使用workerman定时器定时爬取某
  8. 通过 javascript和php 实现打印问题
  9. 如何在PDO中使用RLIKE来转义星号和问号?
  10. php 读取文本文件