android键盘输入读取

 监控android键盘输入方式有两种,一种在java层实现,重写onKeyDownonKeyUp方法。另一种是在jni层实现,监控/dev/input/event0键盘输入设备,获取输入数据。第一种方法缺陷是当有多个键盘设备时候无法区分是哪个键盘输入的,第二种方法是需要有该文件的读写权限。

调试方法

进入adb模式

adb shell

输入以下指令监控键盘输入

getevent
view

方法1实现

代码实现

 @Overridepublic 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);}/*释放按键事件*/@Overridepublic 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 shellroot@octopus-f1:/ # chmod 777 /dev/input/event6

代码实现

#include #include #include #include #include #include #include"Logger.h"#include#include"com_example_liang_myapplication_KeyBoard.h"#define DEV_PATH "/dev/input/event6"   //difference is possiblestatic 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

更多相关文章

  1. android平台移植总结
  2. Android(安卓)完美退出 App 方法
  3. Android(安卓)创建桌面快捷方式
  4. Android(安卓)Kotlin的使用及简单实例
  5. system 权限程序不能访问sd卡问题
  6. Android悬浮窗权限适配
  7. Android主流三方库源码分析(七、深入理解ButterKnife源码)
  8. 从源码角度一步步分析AsyncTask的用法与原理
  9. Android平滑移动——Scroller类研究

随机推荐

  1. Android打包jar 和使用第三方库
  2. android map的使用方法
  3. Android开发知识概要
  4. Android(安卓)FrameLayout子view居中(左居
  5. Android核心功能
  6. Android的init过程(二):初始化语言(init.rc)解
  7. android之声音管理器AudioManager的使用
  8. Android之NDK开发
  9. 构建Android电话相关的应用
  10. Android之AsyncTask异步任务详解总结