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线程(读取事件) ...
随机推荐
- Snowflake 全局唯一Id 生成
/// <summary> /// From: https://github.com/twitter/snowflake /// An object that generates IDs. ...
- .Net Core Linux centos7行—IOC模块
.net core中可以说是用了全新的IOC模板,定义在Microsoft.Extensions.DependencyInjection下.提供了一套标准的接口.并提供了默认实现.并且大范围使用着,处 ...
- 从PHP底层源码去深入理解数组,并用C模拟PHP关联数组(原创)
PHP是一门入门容易,使用范围广泛的语言,以其灵活性以及web后端开发被很多人熟知,也被很多人戏称“PHP是世界上最好的语言”.本人是一名“忠实”的PHPer,相信用过PHP的程序员都会体会到PHP数 ...
- vue.js第六课
class与style绑定 绑定HTML class 对象语法 数组语法 绑定内联样式 对象语法 数组语法 自动添加前缀 1.class与style绑定. 数据绑定一个常见需求就是 操作元素的clas ...
- ubuntu中phpmyadmin密码忘记
在安装mysql时,默认只让你设置了root的密码,如果root的密码忘记,处理办法如下 第一步: 这时你需要进入/etc/mysql目录下,然后sudo vim/vi debian.cnf查看里面的 ...
- perl
introduction: http://www.yiibai.com/perl/perl_introduction.html functions: http://www.yiibai.com/per ...
- HTML学习笔记——标签
最近开始学习前端的一些知识,了解了一下Html和CSS. HTML:是网页内容的载体,它负责的是网页的内涵,也就是网页要呈现的内容,包括了图片,视频还有文字.是网页要加载的东西: CSS:是样式表现, ...
- [POJ&HDU]杂题记录
POJ2152 树形dp,每次先dfs一遍求出距离再枚举所有点转移即可. #include<iostream> #include<cstdio> #include<cma ...
- cavans 详解
http://blog.csdn.net/clh604/article/details/8536059
- jsp上传图片实时显示
jsp代码 <div class="form-group" id="caseIma"> <label class="control- ...