前言

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

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

1.调用input 命令

使用过串口的都明白,如果需要debug 模拟按键,会使用 input keyevent 的方法。这个使用android runtime 模拟执行命令。值得一提的是,有些情况下有人想在代码里调用 adb shell xxx也可以用类似的方式:

try{String keyCommand = "input keyevent " + KeyEvent.KEYCODE_1;Runtime runtime = Runtime.getRuntime();Process proc = runtime.exec(keyCommand);
} catch(IOException e){
}

2.在线程中使用Instrumentation

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

import android.app.Instrumentation;sendKeyCode(KeyEvent.KEYCODE_DPAD_UP);private void sendKeyCode(final int keyCode){new Thread() {public void run() {try {Instrumentation inst = new Instrumentation();inst.sendKeyDownUpSync(keyCode);} catch (Exception e) {e.printStackTrace();}}}.start();}

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);

Android代码中发送Keycode按键相关推荐

  1. android 设置字体大小和不同颜色,Android代码中设置字体大小,字体颜色,显示两种颜色.倒计时效果...

    Android代码中设置字体大小,字体颜色,显示两种颜色 在xml文件中字体大小用的像素 android:id="@+id/uppaid_time" android:layout_ ...

  2. 从Android代码中来记忆23种设计模式

    原文链接:http://www.jianshu.com/p/1a9f571ad7c0 相信大家都曾经下定决心把23种设计模式牢记于心,每次看完之后过一段时间又忘记了~,又得回去看,脑子里唯一依稀记得的 ...

  3. swagger openapi开放平台 pyhton3.7实现http发送请求,pyhon中代码中发送http请求控制4g物联网开关

    swagger openapi开放平台 pyhton3.7实现http发送请求 pyhon中代码中控制 4g物联网开关,此代码与python2.7不兼容,具体体现在加密解: get_authoriza ...

  4. Android代码中实现WAP方式联网

    无论是移动.联通还是电信,都至少提供了两种类型的的APN:WAP方式和NET方式.其中NET方式跟WIFI方式一样,无需任何设置,可自由访问所有类型网站,而WAP方式,需要手机先设置代理服务器和端口号 ...

  5. Android代码中实现 防止手机休眠的处理

    在开发Android程序时,有时候在程序运行的时候,不能让系统休眠,否则有一些运行会停止,因此我们需要设置禁止休眠,有两种方式:一种是添加权限,别一种是代码中设置,建议使用第一种方式,这样,在安装程序 ...

  6. Android系统中发送和注册广播的方式以及优缺点

    在Android系统中,有两种主要的方式可以发送和注册广播:标准广播(Normal Broadcast)和有序广播(Ordered Broadcast),它们各自有不同的优缺点. 1. 标准广播(No ...

  7. android 动态设置margin,android 代码中设置margin

    场景:Android怎么在java代码中设置margin Android如何在java代码中设置margin 原创帖,转发请注明出处:http://thierry-xing.iteye.com/blo ...

  8. Android代码中setvisibility失效了?

    一.问题现象 最近在开发过程中遇到了在代码中setvisibility失效的问题,在网上查了好多资料都没有解决我的问题 二.发生背景 项目是MVVM架构,使用了databinding,想在tablay ...

  9. android 读取短信 彩信,Android系统中发送短信和彩信的代码

    发送短信: String body="this is sms demo"; Intent mmsintent = new Intent(Intent.ACTION_SENDTO, ...

最新文章

  1. 多级反馈队列调度算法描述
  2. API接口自动化之2 处理http请求的返回体,对返回体做校验
  3. 使用 Microsoft Ajax Library 创建自定义客户端脚本
  4. id、构造方法、Category 分类、类的本质、description方法、SEL
  5. mysql输入错误怎样更正_HotDB MySQL 篇| MySQL 源码系列的补充与更正
  6. Spring Boot----Dubbo
  7. 人工智能在线特征系统中的数据存取技术
  8. 三连击(洛谷-P1008)
  9. ArcGIS JavaScript API本地部署离线开发环境
  10. MariaDB修改端口号
  11. Web全栈工程师养成记
  12. c10k java_c10k问题及其解决方案
  13. 零基础快速做一个语音控制系统
  14. python 爬虫抓取中央气象台-台风网
  15. 几个必须知道的Python工具
  16. 输入一个1~9的数字n,求Sn = n + nn + nnn+ nnnn + nnnnn的值
  17. 由于老是重装系统,今天记录一下重装系统后大学生要安装的软件
  18. 一款查找并删除电脑中重复文件/图片/视频的软件
  19. 八年级计算机教案下册,八年级信息技术下册教案
  20. matlab C 混编 --- 在MATLAB中使用c语言函数

热门文章

  1. ubantu虚拟机搭建xl2tp服务
  2. ENVI安装步骤和常见问题及解决办法(以ENVI5.3为例)
  3. 许昌科技学校工业机器人_走进许昌科技学校
  4. 【计算机组成原理】一位全加器
  5. 利用 Heritrix 构建特定站点爬虫
  6. mysql第一二三范式_第一范式、第二范式、第三范式
  7. SAP ABAP PA certification 培训笔记 part 4
  8. 内网邮件JAVA535报错_利用网易邮箱发送邮件535报错处理
  9. linux 汇编 教程,Linux下实现 MASM汇编
  10. 小程序安卓和ios使用自定义字体,解决安卓不生效问题