input

1,可以通过第三方apk 读取键值上报是否正确,简单测试程序如下:

    

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <linux/input.h>


#define KEY_DEV "/dev/input/event2"


static int ts_fd = -1; 
static struct input_event data;


static int init_device(char *TS_DEV)
{
    if((ts_fd = open(TS_DEV, O_RDONLY)) < 0)
    {   
        printf("Error open %s\n\n", TS_DEV);
        return -1; 
    }   
    return ts_fd;
}


static int test_key()
{
    if(init_device(KEY_DEV) < 0)
        return -1; 
printf("waiting for key......\n");
    while(1)
    {   
        read(ts_fd, &data, sizeof(data));
        if (data.type == EV_KEY)
            printf("type: EV_KEY, event = %d, value = %d\n",data.code, data.value);
    }   
    return 0;
}


int main()
{
        test_key();
        return 0;
}

 2 键值映射

根据Android官方教程Key Layout Files分析它会优先读取/system/usr/keylayout/DEVICE_NAME.kl按键映射文件。而设备上的物理按键的设备名正好是「rk29-keypad」,可以通过getevent查看出来。

        这也解释了20140315添加红外遥控器的键值时不能添加到rk29-keypad.kl中,而添加到Generic.kl可以正常。因为Generic.kl的属于fallback级别的映射文件。针对遥控器正确的方法同样新建立一个DEVICE_NAME.kl的映射文件。比如遥控器设备名为rkxx-remotectl那么新建一个rkxx-remotectl.kl映射文件,内容是和Generic.kl中类似的每个键值对应的键码。这个方法要远比直接修改Generic.kl文件要好的多了。

        其实同样也有了新的疑问,如果DEVICE_NAME.kl中没有声明的键值,那么就不会去Generic.kl中查找,这点我是有点自己的建议的,应该像字库一样,在相应的字库中查找不到的字都到fallback字体中查找一下。


3修改按键字符

关键文件*.kcm通过修改对应的kcm 修改对应的按键显示字符,如遇到需要输入特殊字符,需要转码.转码可以参照百度(搜索)特殊字符, 找到特殊的字符复制粘贴到unicode 编码工具转换一下,http://www.cnblogs.com/skykang/archive/2011/06/02/2068802.html
可以使用http://pan.baidu.com/s/1slaO3HN工具来获取上报的按键是什么


4 系统音量有时候自动增加:

思路: 先确定是上层引起还是底层引起。

 使用getevent 获取上报的键值定位到哪里上报。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值