android键盘输入读取
android键盘输入读取
监控android键盘输入方式有两种,一种在java层实现,重写onKeyDown和onKeyUp方法。另一种是在jni层实现,监控/dev/input/event0键盘输入设备,获取输入数据。第一种方法缺陷是当有多个键盘设备时候无法区分是哪个键盘输入的,第二种方法是需要有该文件的读写权限。
调试方法
进入adb模式
adb shell
输入以下指令监控键盘输入
getevent

方法1实现
代码实现
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
switch(keyCode){
case KeyEvent.KEYCODE_0:
testview.setText("按下按键0");
break;
case KeyEvent.KEYCODE_1:
testview.setText("按下按键1");
break;
case KeyEvent.KEYCODE_2:
testview.setText("按下按键2");
break;
case KeyEvent.KEYCODE_3:
testview.setText("按下按键3");
break;
case KeyEvent.KEYCODE_4:
testview.setText("按下按键4");
break;
case KeyEvent.KEYCODE_5:
testview.setText("按下按键5");
break;
case KeyEvent.KEYCODE_6:
testview.setText("按下按键6");
break;
case KeyEvent.KEYCODE_7:
testview.setText("按下按键7");
break;
case KeyEvent.KEYCODE_8:
testview.setText("按下按键8");
break;
case KeyEvent.KEYCODE_9:
testview.setText("按下按键9");
break;
case KeyEvent.KEYCODE_DEL:
testview.setText("按下按键*");
break;
case KeyEvent.KEYCODE_ENTER:
testview.setText("按下按键#");
break;
default:
testview.setText("无法识别输入");
break;
}
return super.onKeyDown(keyCode, event);
}
/*释放按键事件*/
@Override
public boolean onKeyUp(int keyCode,KeyEvent event){
switch(keyCode){
case KeyEvent.KEYCODE_0:
testview.setText("放开按键0");
break;
case KeyEvent.KEYCODE_1:
testview.setText("放开按键1");
break;
case KeyEvent.KEYCODE_2:
testview.setText("放开按键2");
break;
case KeyEvent.KEYCODE_3:
testview.setText("放开按键3");
break;
case KeyEvent.KEYCODE_4:
testview.setText("放开按键4");
break;
case KeyEvent.KEYCODE_5:
testview.setText("放开按键5");
break;
case KeyEvent.KEYCODE_6:
testview.setText("放开按键6");
break;
case KeyEvent.KEYCODE_7:
testview.setText("放开按键7");
break;
case KeyEvent.KEYCODE_8:
testview.setText("放开按键8");
break;
case KeyEvent.KEYCODE_9:
testview.setText("放开按键9");
break;
case KeyEvent.KEYCODE_DEL:
testview.setText("放开按键*");
break;
case KeyEvent.KEYCODE_ENTER:
testview.setText("放开按键#");
break;
default:
testview.setText("无法识别输入");
break;
}
return super.onKeyUp(keyCode, event);
}
方法2实现
赋予可读写权限
C:\Users\liang>adb shell
root@octopus-f1:/ # chmod 777 /dev/input/event6
代码实现
#include <stdio.h>
#include <linux/input.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include"Logger.h"
#include<pthread.h>
#include"com_example_liang_myapplication_KeyBoard.h"
#define DEV_PATH "/dev/input/event6" //difference is possible
static void* pthread_read_keyboard(void*){
int keys_fd;
char ret[2];
struct input_event t;
keys_fd=open(DEV_PATH, O_RDONLY);
if(keys_fd <= 0)
{
LOGE("%s device error!\n",DEV_PATH);
}
for(;;){
usleep(500);
if(read(keys_fd, &t, sizeof(t)) == sizeof(t))
{
if(t.type==EV_KEY)
if(t.value==0 || t.value==1)
{
LOGE("key %d %s\n", t.code, (t.value) ? "Pressed" : "Released");
if(t.code == KEY_ESC)
break;
}
}
}
LOGE("pthread_read_keyboard exit\n");
close(keys_fd);
}
自己写的
DEMO
android键盘输入读取的更多相关文章
- java Scanner与BufferedReader读取键盘输入性能比较
java Scanner与BufferedReader读取键盘输入性能比较 1.Scanner和BufferedReader 性能比较 在java中常见的从键盘获取输入的方式有 ...
- Android系统--输入系统(八)Reader线程_使用EventHub读取事件
Android系统--输入系统(八)Reader线程_使用EventHub读取事件 1. Reader线程工作流程 获得事件 size_t count = mEventHub->getEvent ...
- [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等
1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...
- python通过标准输入读取内容,读取键盘输入的内容?接收用户输入?
需求说明: 在交互式脚本中,需要用户手动输入内容,并对内容进行处理.在这里记录下通过 python的内置函数input()读取标注输入的内容.默认的标准输入是键盘. 操作过程: 1.通过input() ...
- Android - 隐藏EditText弹出的软键盘输入(SoftInput)
隐藏EditText弹出的软键盘输入(SoftInput) 本文地址: http://blog.csdn.net/caroline_wendy 保持界面的整洁, 能够选择在进入界面时, 隐藏EditT ...
- Python打印到屏幕_读取键盘输入
Python打印到屏幕_读取键盘输入: print( ): 打印输出括号中的值 print("hello") # hello strs = 'hello' print(" ...
- C语言实现数据机构链表的基本操作(从键盘输入生成链表、读取数组生成链表)
利用头插法实现逆置 下面简单介绍一下,算法思想结合图示看 算法思想:"删除"头结点与链表其他结点的原有联系(即将头结点的指针置空),再逐个插入逆置链表的表头(即"头插&q ...
- Android系统--输入系统(五)输入系统框架
Android系统--输入系统(五)输入系统框架 1. Android设备使用场景: 假设一个Android平板,APP功能.系统功能(开机关机.调节音量).外接设备功能(键盘.触摸屏.USB外接键盘 ...
- Android系统--输入系统(七)Reader_Dispatcher线程启动分析
Android系统--输入系统(七)Reader_Dispatcher线程启动分析 1. Reader/Dispatcher的引入 对于输入系统来说,将会创建两个线程: Reader线程(读取事件) ...
随机推荐
- [LeetCode] Remove Nth Node From End of List 移除链表倒数第N个节点
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- ViewController的生命周期分析和使用
iOS的SDK中提供很多原生ViewController,大大提高了我们的开发效率,下面是我的一些经验. 一.结构 按结构可以对iOS的所有ViewController分成两类:1.主要用于展示内容的 ...
- 在javascript中使用Json
jSON是JavaScript面向对象语法的一个子集.由于JSON是JavaScript的一个子集,因此它可清晰的运用于此语言中. 文本生成json对象,必须在外面加一对括号. js 代码 var m ...
- sublime 插件推荐: Nettuts+ Fetch
Nettuts+ Fetch github地址:Nettuts-Fetch 在sublime中直接用 ctrl+shift+P -> pci -> Nettuts-Fetch 即可下载 这 ...
- bzoj 1500 维修数列
splay乱搞. 调了两个多小时...这辈子再也不想写splay了... 维护左边最大连续和右边最大连续,维护两个标记,无脑push_down.push_up就行了. 注意最大连续和至少要包含一个数. ...
- HibernateSessionFactory建立-使用ThreadLocal
立即加载还是延迟加载必须要连接数据库的,而在Java中连接数据库是依赖java.sql.Connection,在hibernate中session就是Connection的一层高级封装,一个sessi ...
- UVA1625Color Lenth(DP+LCS变形 未AC)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/C 紫书P276 res[i][j]表示第一个序列移动i个,第 ...
- iOS 10、Xcode 8 遇到部分问题解决记录
今天把iphone 6 升级到ios10 后,用Xcode 7进行真机调试的时候提示: Could not find Developer Disk Image 果断准备升级到Xcode 8 .但是想保 ...
- OnClick和OnClientClick的区别
OnClientClick是客户端事件处理方法,一般采用JavaScript来进行处理,也就是直接在IE端运行,一点击就运行. OnClick是服务器端事件处理方法,在服务器端也就是IIS中运行,点击 ...