美文网首页
android键盘输入读取

android键盘输入读取

作者: QUSIR | 来源:发表于2017-08-10 14:16 被阅读456次

android键盘输入读取

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

调试方法

进入adb模式

adb shell

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

getevent
view

方法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键盘输入读取

    android键盘输入读取  监控android键盘输入方式有两种,一种在java层实现,重写onKeyDown和...

  • 2018-07-15

    今天看了如何进行读取键盘输入的数据。

  • 读取键盘输入

    到目前为止我们编写的脚本都缺乏一项在大多数计算机程序中都很常见的功能-交互性。也就是,程序与用户进行交互的能力。虽...

  • IO与流 -- 打印流与序列流

    使用流读取键盘输入 标准键盘录入代码 BufferedReader bufr = new BufferedRead...

  • Java学习笔记_3

    读取键盘输入 System.in 是InputStream对象,查看这个类的方法比如read();clode();...

  • 文本查看命令

    文件查看命令: cat,tac,rev cat 文本内容查看,读取键盘输入,输出到终端 cat [OPTION]...

  • Python 高级

    Python 文件I/O 读取键盘输入raw_inputinput raw_input函数 input函数inpu...

  • Android & Java中的文件读取方式集合

    一、Android 中的文件读取 1.读取 Android Project 下的文件 Android 资源管理框架...

  • Console的Read、ReadLine与ReadKey的区别

    Console.readkey():监听键盘事件,按任意键执行退出。 Console.read():读取键盘输入的...

  • Shell Snippet

    显示当前时间+时区 提示输入确认信息 switch-case语法 读取键盘输入 循环语句 and , or 字符串...

网友评论

      本文标题:android键盘输入读取

      本文链接:https://www.haomeiwen.com/subject/nkshrxtx.html