android键盘输入读取

 监控android键盘输入方式有两种,一种在java层实现,重写onKeyDownonKeyUp方法。另一种是在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键盘输入读取的更多相关文章

  1. java Scanner与BufferedReader读取键盘输入性能比较

    java  Scanner与BufferedReader读取键盘输入性能比较            1.Scanner和BufferedReader 性能比较 在java中常见的从键盘获取输入的方式有 ...

  2. Android系统--输入系统(八)Reader线程_使用EventHub读取事件

    Android系统--输入系统(八)Reader线程_使用EventHub读取事件 1. Reader线程工作流程 获得事件 size_t count = mEventHub->getEvent ...

  3. [Python] python3 文件操作:从键盘输入、打开关闭文件、读取写入文件、重命名与删除文件等

    1.从键盘输入 Python 2有两个内置的函数用于从标准输入读取数据,默认情况下来自键盘.这两个函数分别是:input()和raw_input(). Python 3中,不建议使用raw_input ...

  4. python通过标准输入读取内容,读取键盘输入的内容?接收用户输入?

    需求说明: 在交互式脚本中,需要用户手动输入内容,并对内容进行处理.在这里记录下通过 python的内置函数input()读取标注输入的内容.默认的标准输入是键盘. 操作过程: 1.通过input() ...

  5. Android - 隐藏EditText弹出的软键盘输入(SoftInput)

    隐藏EditText弹出的软键盘输入(SoftInput) 本文地址: http://blog.csdn.net/caroline_wendy 保持界面的整洁, 能够选择在进入界面时, 隐藏EditT ...

  6. Python打印到屏幕_读取键盘输入

    Python打印到屏幕_读取键盘输入: print( ): 打印输出括号中的值 print("hello") # hello strs = 'hello' print(" ...

  7. C语言实现数据机构链表的基本操作(从键盘输入生成链表、读取数组生成链表)

    利用头插法实现逆置 下面简单介绍一下,算法思想结合图示看 算法思想:"删除"头结点与链表其他结点的原有联系(即将头结点的指针置空),再逐个插入逆置链表的表头(即"头插&q ...

  8. Android系统--输入系统(五)输入系统框架

    Android系统--输入系统(五)输入系统框架 1. Android设备使用场景: 假设一个Android平板,APP功能.系统功能(开机关机.调节音量).外接设备功能(键盘.触摸屏.USB外接键盘 ...

  9. Android系统--输入系统(七)Reader_Dispatcher线程启动分析

    Android系统--输入系统(七)Reader_Dispatcher线程启动分析 1. Reader/Dispatcher的引入 对于输入系统来说,将会创建两个线程: Reader线程(读取事件) ...

随机推荐

  1. python读取excel一例-------从工资表逐行提取信息

    在工作中经常要用到python操作excel,比如笔者公司中一个人事MM在发工资单的时候,需要从几百行的excel表中逐条的粘出信息,然后逐个的发送到员工的邮箱中.人事MM对此事不胜其烦,终于在某天请 ...

  2. redis分片

    本文是在window环境下测试 什么是分片 当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储 那么当多个请求来取数据时,如何知道数据在哪个redis呢,redis有 ...

  3. 详解mysql如何配置远程链接,解决各种连接问题

    在服务器上面我们经常需要去使用mysql,有些童鞋刚刚配置好了服务器,想在本地的一些图形化软件去连接mysql得到更直观的表格显示,此时很可能不允许连接,为了探究为什么连接失败,在这里我会对mysql ...

  4. smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')解决办法

    raise SMTPAuthenticationError(code, resp) smtplib.SMTPAuthenticationError: (535, b'Error: authentica ...

  5. 页内多个input全选不干扰且只用一段代码。

    //html内容 <body> <div id="d1"> <input type="checkbox" class=" ...

  6. php class

    一个类可以包含有属于自己的常量,变量(称为"属性")以及函数(称为"方法"). $ 变量--专业术语上称它为"属性".  function ...

  7. pureftp在centos下与MySQL搭配使用

    概述 pure-ftpd是linux下的一个ftp服务端,据说安全性较高.我在centos6下用yum安装pure-ftpd,并配置了通过MySQL进行用户的增删改查,以及对应到apache的web目 ...

  8. CodeForces 698C LRU

    吐槽一句:这数据造得真强-. 题意:有一个大小为k的缓存区,每次从n种物品中按照一定的概率选取一种物品尝试放进去.同一个物品每一次选取的概率都是相同的.如果这种物品已经放进去过就不再放进去.如果缓存区 ...

  9. 他(he)(钟神)

    他[问题描述]一张长度为N的纸带,我们可以从左至右编号为0 −N(纸带最左端标号为0) .现在有M次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带的长度是多少.[输入格式]第一行两个数字N, ...

  10. 简洁的div翻转案例

    <!DOCTYPE html> <html > <head> <title>test</title> <meta http-equiv ...