android模拟全局按键,Android 模拟按键汇总
名词解释:
scancode: 驱动对硬件的标记
keycode: 上层应用程序所见的标记,跟硬件的标记不同, 一般为KEY_F1之类的宏
一般驱动将scancode绑定到keycode
对未绑定的scancode, 可以通过setkeycodes将将其绑定到未使用的keycode
注: 有些按键会被解释成acpi event, 可以通过acpi_listen来监听,但不一定成功,目前还没具体了解
模 拟按键是上层应用程序的行为, 所以不需要编译成模块,只需要想平常的应用程序那样编译就可以了, 不过它要包含这个文件, 同时要明确键盘对应的/dev/input/event[0-4]到底是哪个文件, 此外还需要以root权限来运行
赖半仙注解:
运行命令 cat /proc/bus/input/devices 在输出里面查找 xxx keyboard 对应的文件是/dev/input/event几。我开始想当然的以为键盘文件是event1,结果死人都调不出来,弄了很久最后从event0开始一个一个试,才发现我的手提电脑键盘文件对应的是event4。
在我的电脑上运行命令 ls /dev/input/event* 发现有好多输入设备…………
/dev/input/event0 /dev/input/event10 /dev/input/event2 /dev/input/event4 /dev/input/event6 /dev/input/event8
/dev/input/event1 /dev/input/event11 /dev/input/event3 /dev/input/event5 /dev/input/event7 /dev/input/event9
下面是 cat /proc/bus/input/devices 命令对应键盘文件的一段输出
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input4
U: Uniq=
H: Handlers=kbd event4
B: EV=120013
B: KEY=8000 0 0 0 0 0 5007 2002000 380307c f800d001 feffffdf ffefffff ffffffff ffffffff
B: MSC=10
B: LED=7
下面的程序是模拟按键NumLock,就是控制小键盘灯的那个按键,按下去(运行程序没有问题)后小键盘灯就会点亮或者熄灭。
#include
#include
#include
#include
#include
#include
void simulate_key(int fd, unsigned int keycode, int keyvalue)
{
struct input_event event;
event.type = EV_KEY;
event.code = keycode;
event.value = keyvalue;
gettimeofday(&event.time, 0);
if (write(fd, &event, sizeof(event)) < 0) {
printf("simulate key error/n");
return;
}else
printf("simuate key %d, %d/n", keycode, keyvalue);
}
int
main ( int argc, char *argv[] )
{
char *path = "/dev/input/event1";
unsigned int key_code = KEY_NUMLOCK;
if (argc >= 3) {
path = argv[1];
key_code = atoi(argv[2]);
}else if (argc >= 2)
path = argv[1];
int fd_kbd = open(path, O_RDWR);
if(fd_kbd <= 0) {
printf("error open keyboard:%s/n", strerror(errno));
return -1;
}
simulate_key(fd_kbd, key_code, 1);
simulate_key(fd_kbd, key_code, 0);
close(fd_kbd);
return 0;
} /* ---------- end of function main ---------- */
触发单击屏幕事件
public void myClickEvent(float x, float y) {
long firstTime = SystemClock.uptimeMillis();
final MotionEvent firstEvent = MotionEvent.obtain(firstTime, firstTime,
MotionEvent.ACTION_DOWN, x, y, 0);
long secondTime = firstTime + 30;
final MotionEvent secondEvent = MotionEvent.obtain(secondTime,
secondTime, MotionEvent.ACTION_UP, x, y, 0);
dispatchTouchEvent(firstEvent);
dispatchTouchEvent(secondEvent);
}
public void myClickEvent(float x, float y) {
long firstTime = SystemClock.uptimeMillis();
final MotionEvent firstEvent = MotionEvent.obtain(firstTime, firstTime,
MotionEvent.ACTION_DOWN, x, y, 0);
long secondTime = firstTime + 30;
final MotionEvent secondEvent = MotionEvent.obtain(secondTime,
secondTime, MotionEvent.ACTION_UP, x, y, 0);
dispatchTouchEvent(firstEvent);
dispatchTouchEvent(secondEvent);
}
sendevent /dev/input/event0 [TYPE] [CODE] [VALUE]
onTouchEvent
KEYCODE_UNKNOWN=0; KEYCODE_SOFT_LEFT=1; KEYCODE_SOFT_RIGHT=2; KEYCODE_HOME=3; KEYCODE_BACK=4; KEYCODE_CALL=5; KEYCODE_ENDCALL=6; KEYCODE_0=7; KEYCODE_1=8; KEYCODE_2=9; KEYCODE_3=10; KEYCODE_4=11; KEYCODE_5=12; KEYCODE_6=13; KEYCODE_7=14; KEYCODE_8=15; KEYCODE_9=16; KEYCODE_STAR=17; KEYCODE_POUND=18; KEYCODE_DPAD_UP=19; KEYCODE_DPAD_DOWN=20; KEYCODE_DPAD_LEFT=21; KEYCODE_DPAD_RIGHT=22; KEYCODE_DPAD_CENTER=23; KEYCODE_VOLUME_UP=24; KEYCODE_VOLUME_DOWN=25; KEYCODE_POWER=26; KEYCODE_CAMERA=27; KEYCODE_CLEAR=28; KEYCODE_A=29; KEYCODE_B=30; KEYCODE_C=31; KEYCODE_D=32; KEYCODE_E=33; KEYCODE_F=34; KEYCODE_G=35; KEYCODE_H=36; KEYCODE_I=37; KEYCODE_J=38; KEYCODE_K=39; KEYCODE_L=40; KEYCODE_M=41; KEYCODE_N=42; KEYCODE_O=43; KEYCODE_P=44; KEYCODE_Q=45; KEYCODE_R=46; KEYCODE_S=47; KEYCODE_T=48; KEYCODE_U=49; KEYCODE_V=50; KEYCODE_W=51; KEYCODE_X=52; KEYCODE_Y=53; KEYCODE_Z=54; KEYCODE_COMMA=55; KEYCODE_PERIOD=56; KEYCODE_ALT_LEFT=57; KEYCODE_ALT_RIGHT=58; KEYCODE_SHIFT_LEFT=59; KEYCODE_SHIFT_RIGHT=60; KEYCODE_TAB=61; KEYCODE_SPACE=62; KEYCODE_SYM=63; KEYCODE_EXPLORER=64; KEYCODE_ENVELOPE=65; KEYCODE_ENTER=66; KEYCODE_DEL=67; KEYCODE_GRAVE=68; KEYCODE_MINUS=69; KEYCODE_EQUALS=70; KEYCODE_LEFT_BRACKET=71; KEYCODE_RIGHT_BRACKET=72; KEYCODE_BACKSLASH=73; KEYCODE_SEMICOLON=74; KEYCODE_APOSTROPHE=75; KEYCODE_SLASH=76; KEYCODE_AT=77; KEYCODE_NUM=78; KEYCODE_HEADSETHOOK=79; KEYCODE_FOCUS=80;//*Camera*focus KEYCODE_PLUS=81; KEYCODE_MENU=82; KEYCODE_NOTIFICATION=83; KEYCODE_SEARCH=84; KEYCODE_MEDIA_PLAY_PAUSE=85; KEYCODE_MEDIA_STOP=86; KEYCODE_MEDIA_NEXT=87; KEYCODE_MEDIA_PREVIOUS=88; KEYCODE_MEDIA_REWIND=89; KEYCODE_MEDIA_FAST_FORWARD=90; KEYCODE_MUTE=91;
android模拟全局按键,Android 模拟按键汇总相关推荐
- android app全局字体,Android app全局字体设置
相信很多对设计追求极致的开发者们对Android系统的默认字体都会感到不满意,这个时候需要使用自定义的字体,当然可以使用系统提供的Typeface来加载自定义字体,但是,一个个TextView的设置, ...
- adb 模拟按键,调试按键,android测试可以用
我们在用adb 调试app时,如果需要模拟按键怎样做呢 (http://blog.csdn.net/sergeycao),可以使用如下的方法 adb shell input keyevent 4 #这 ...
- android模拟power键,android 发送模拟按键
1. 权限 需要在manifest 里面增加android:sharedUserId="android.uid.system" 加上权限 ... android:sharedUse ...
- Android 模拟按键,模拟触摸点击,模拟滑动
(1)模拟按键发送事件 1.1 在dispatchKeyvent中直接替换按键Code @Override public boolean dispatchKeyEvent(KeyEvent e ...
- android 模拟电脑按键精灵,模拟精灵_安卓模拟精灵_和按键精灵一样的软件
多普鼠标键盘万能模拟精灵程序以指定窗口为操作目标,定位更准确.更快捷,并且不需要编写任何代码,只要会电脑操作的人就可以快速的生成强大的后台操作代码,可以完成任何一个前台用户可以完成的工作,可以应用到任 ...
- 怎么看android底层源码,Android 底层按键获取
与用户交互的输入设备(触摸屏,键盘等)是获取用户意图的来源.由于硬件本身的物理特性及由各大硬件厂商的标准不一,这将导致我们从设备上获取到的键值存在一定的差异性,为了让系统能够正确处理用户的操作,我们就 ...
- 模拟手指触摸 Android,TouchLib
TouchLib Android模拟触摸屏幕库(Android simulates a touch screen) 描述 在Root情况下也许你有模拟触摸屏幕的需求,如按键精灵那样的功能. 如何使用 ...
- Android基于Socket无线遥控 - 模拟触摸按键篇framework jar
Android基于Socket无线遥控(一)-Socket基本模型搭建 http://233.io/article/1017992.html 本篇主要内容涉及模拟系统按键消息,单击事件,触屏事件等,模 ...
- android 辅助功能 模拟点击,Android模拟点击的四种方式
导论 在Android中模拟一个点击事件有三种方式是通过模拟MotionEvent来实现:一种是通过ADB来实现:一种是通过Instrumentation测试框架来实现 第一种:模拟MotionEve ...
- android+usb模拟点击,Android后台模拟点击探索(附源码)
工作中我们需要自制一套工具,其中遇到需要模拟点击事件的需求,类似按键精灵的功能,支持后台持续运行,满足触发条件时完成点击. 经过一番探索,一共整理出两种不同的方案:AccessibilityServi ...
最新文章
- c#将http调用返回额json中的有关中文的unicode转换为中文
- 一次恐怖的 Java 内存泄漏排查实战
- 【渝粤教育】国家开放大学2018年秋季 1167t环境水利学 参考试题
- 递归算法思路以及题目总结(未完待续...)
- XML DOM 节点类型(Node Types)
- BZOJ5329:[SDOI2018]战略游戏(圆方树,虚树)
- a1277以太网适配器驱动_福禄克DSX系列工业以太网连接器集锦
- Ribbon界面开发:如何创建Ribbon样式的应用程序框架
- 计算机控制技术实验平台,THBDC-1控制理论计算机控制技术实验平台简介.doc
- 深入理解Java枚举类型(enum)
- 【计算几何】求三角形外接圆的周长、面积公式
- 同步多个 git 远程仓库
- 案例效果:实现移动端端轮播图效果
- char* char[] char** char*[] char[][]详解
- 零基础学习PS——Photoshop的167个技能
- 51单片机 简易秒表计时器(100秒) 小数点后四位
- 在编译humanoid_navigation相关软件包,出现 Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:解决方案
- 居上无宦乐,达人不折腰
- mysql命令去重_mysql去重
- 精通正则表达式读书笔记
热门文章
- setoolkit简易社会工程学攻击
- mysql数据库索引案例_MySQL 数据库案例优化分享-爱可生
- pandas用众数填充缺失值_缺而不失——pandas中常见缺失值处理方法
- JS--JavaScript提交表单(submit事件)、重置表单、取消默认提交表单(单击按钮、回车)
- redmine mysql 配置_Redmine 2.0.3 安装配置
- 繁体字非主流伤感日志_親愛的,為什麼
- matlab2012添加工具箱,关于matlab添加工具箱的命令
- php 修改json数组的值,php如何修改json数据
- Android drawable快速实现竖向ProgressBar
- vue实现竖向跑马灯