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. Spark MLlib - LFW

    val path = "/usr/data/lfw-a/*" val rdd = sc.wholeTextFiles(path) val first = rdd.first pri ...

  2. git详解

    Git使用教程   source: http://www.cnblogs.com/tugenhua0707/p/4050072.html 一:Git是什么? Git是目前世界上最先进的分布式版本控制系 ...

  3. vs2013给类添加默认注释

    目录:D:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplatesCache\CSharp\Code\20 ...

  4. HTML之CSS学习

    学前预备 <!DOCTYPE html> <html> <head> <title>标题</title> <meta charset= ...

  5. Mysql支持的数据类型(总结)

    一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUB ...

  6. 几种常见的Shell

    Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把它们称作一种Shell.我们常说有多少种Shell,其实说的是Shell脚本解释器. bash bash是L ...

  7. SVN服务器搭建

    一.SVN下载:https://tortoisesvn.net/downloads.html,下载安装步骤百度一下,基本上都是一路点击next即可安装完成. 服务端安装文件: 二.测试是否安装成功,在 ...

  8. 使用django开发博客过程记录1——数据库设计

    1.数据库设计 2.插入测试数据 3.配置相关问题 1.数据库设计 数据库有简单的三张表:Article.Category.Tag以下是代码 # -*- coding:utf-8 -*- from _ ...

  9. Struts2 拦截器配置以及实现

    @(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...

  10. ORACLE常用数值函数、转换函数、字符串函数

    本文更多将会介绍三思在日常中经常会用到的,或者虽然很少用到,但是感觉挺有意思的一些函数.分二类介绍,分别是: 著名函数篇 -经常用到的函数 非著名函数篇-即虽然很少用到,但某些情况下却很实用 注:N表 ...