Android下添加新的自定义键值和按键处理流程
Android下添加新的自定义键值和按键处理流程
首先分析下Android下怎么添加新的自定义键值。在Android的原生系统中键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?

- <span style=< span="">"font-family:FangSong_GB2312;font-size:18px;">shell@orange:/ # cat /proc/bus/input/devices
- I: Bus=0018 Vendor=3697 Product=0001 Version=0001
- N: Name="MStar Smart TV IR Receiver"
- P: Phys=/dev/ir
- S: Sysfs=/devices/virtual/rc/rc0/input0
- U: Uniq=
- H: Handlers=kbd event0
- B: PROP=0
- B: EV=13
- B: KEY=fc0000 0 fc900 142851 0 0 0 0 108000 1a8 c0000c01 9e37c0 48007 f8000000 10000ffc
- B: MSC=10
- I: Bus=0000 Vendor=0000 Product=0000 Version=0000
- N: Name="MCE IR Keyboard/Mouse (ir)"
- P: Phys=/input0
- S: Sysfs=/devices/virtual/input/input1
- U: Uniq=
- H: Handlers=kbd mouse0 event1
- B: PROP=0
- B: EV=100017
- B: KEY=30000 0 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe
- B: REL=3
- B: MSC=10
- shell@orange:/ #
- shell@orange:/ #
通过打印信息我们可以知道,我们的终端设备使用的是Vendor_3697_Product_0001.kl文件,我这里只分析IT遥控设备,那我们的Vendor_3697_Product_0001.kl里面又是啥呢,我们可以通过cat命令查看,具体的信息如下:
- <span style=< span="">"font-family:FangSong_GB2312;font-size:18px;"># Copyright (C) 2010 The Android Open Source Project
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- #
- # MStar Smart TV IR Receiver.
- #
- key 116 POWER WAKE
- key 11 0
- key 2 1
- key 3 2
- key 4 3
- key 5 4
- key 6 5
- key 7 6
- key 8 7
- key 9 8
- key 10 9
- key 398 PROG_RED
- key 399 PROG_GREEN
- key 400 PROG_YELLOW
- key 401 PROG_BLUE
- key 103 DPAD_UP
- key 108 DPAD_DOWN
- key 105 DPAD_LEFT
- key 106 DPAD_RIGHT
- key 28 ENTER
- key 402 CHANNEL_UP WAKE_DROPPED
- key 403 CHANNEL_DOWN WAKE_DROPPED
- key 115 VOLUME_UP WAKE_DROPPED
- key 114 VOLUME_DOWN WAKE_DROPPED
- key 104 PAGE_UP
- key 109 PAGE_DOWN
- key 102 HOME WAKE_DROPPED
- key 139 MENU WAKE_DROPPED
- key 158 BACK
- key 113 VOLUME_MUTE
- key 167 DVR
- key 138 GUIDE
- key 358 INFO
- #key 82 WINDOW
- #key 79 TV_INPUT
- key 168 MEDIA_REWIND
- key 159 MEDIA_FAST_FORWARD
- key 165 MEDIA_PREVIOUS
- key 163 MEDIA_NEXT
- key 207 MEDIA_PLAY
- key 119 MEDIA_PAUSE
- key 128 MEDIA_STOP
- # Common extended
- key 392 SOUND_MODE
- key 212 PICTURE_MODE
- key 372 ASPECT_RATIO
- key 363 CHANNEL_RETURN
- key 142 SLEEP
- key 365 EPG
- key 395 LIST
- #key 370 SUBTITLE
- key 466 MTS
- key 467 FREEZE
- key 468 TTX
- key 469 CC
- key 470 TV_SETTING
- key 471 SCREENSHOT
- key 356 TV_POWER
- # Mstar extended
- key 59 MSTAR_BALANCE
- key 60 MSTAR_INDEX
- key 61 MSTAR_HOLD
- key 62 MSTAR_UPDATE
- key 63 MSTAR_REVEAL
- key 64 MSTAR_SUBCODE
- key 65 MSTAR_SIZE
- key 66 MSTAR_CLOCK
2)在Vendor_3697_Product_0001.kl文件中添加映射
123 -- 该按键在linux驱动中对应的键值,我在这里只是假设的这个值,至于具体对应的是那个可以查看“include/linux/input.h”
WLS -- 123按键映射到Android中的按键,它对应是“KeycodeLabels.h”文件中的KEYCODES表格元素的“literal”值。
其中KeycodeLabels.h的定义如下,我们可以在"MSTAR_PVR_BROWSER", 319后面添加我们需要向Android上层抛的键值,我们这里定义为"WLS", 320,所以当Android上层监听到320的按键值是就是我们新添加的键值了。
Android下添加新的自定义键值和按键处理流程的更多相关文章
- Android下添加新的自定义键值和按键处理流程【转】
本文转载自: Android下添加新的自定义键值和按键处理流程 说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我一 ...
- STL: unordered_map 自定义键值使用
使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...
- Ubuntu下添加新分区并设置挂载点
Ubuntu下添加新分区并设置挂载点 最近在做Android项目,可是解压根文件系统以后,就报警说硬盘不够.当初设置使用的大小为15G.不过扩展分区还是很方便的.当然首先你得设置添加使用的硬盘大小 ...
- map自定义键值类型
map自定义键值类型 改变Map的默认比较方式 https://www.cnblogs.com/zjfdlut/archive/2011/08/12/2135698.html 大家知道,STL中的ma ...
- 痞子衡嵌入式:MCUXpresso IDE下添加新路径下源文件进工程编译的方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下添加新路径下源文件进工程编译的方法. 接着上篇文章 <MCUXpresso IDE下SDK工程导入与 ...
- std::map使用结构体自定义键值
使用STL中的map时候,有时候需要使用结构题自定义键值,比如想统计点的坐标出现的次数 struct Node{ int x,y; }; ...... map<Node,int>mp; m ...
- 【Android Developers Training】 24. 保存键值对
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Zabbix的自定义键值和自动发现功能监控Oracle数据库的表空间
前面介绍了利用Orabbix监控了,参考zabbix通过Orabbix监控oracle数据库,这里我们原先的模板中进行了修改,使用自动发现功能实现监控tablespace的使用情况. 1. 在被监控的 ...
- linux系统下添加新硬盘的方法详解
对于linux新手来说,在linux上添加新硬盘,是很有挑战性的一项工作. 在Linux服务器上把硬盘接好,启动linux,以root登陆. fdisk -l ## 这里是查看目前系统上有几块硬盘 D ...
随机推荐
- INotifyPropertyChanged, Interface
Data Object(class) impliment INotifyPropertyChanged; then the Object can update BindingSource. Impli ...
- js数组去重的hash方法
对于 JavaScript 数组去除重复项,现在有多种方法,其中一种是hash,如下: if (!Array.prototype.unique) { Array.prototype.unique = ...
- ajax跨域通过 Cors跨域资源共享 进行GetPost请求
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...
- VS2012完全卸载与VS2013安装
项目本来使用的是vs2012 Ultimate,也一直跟随ms的节奏安装了从1到4的update,但一些无法忍受的问题却一直没有解决: 1.偶尔出现要等待编辑器响应的情况: 2.偶尔输入了冒号也不会出 ...
- AJAX发送参数到后台,前台火狐debug报undefine
后面经过查找:估计是数据并不是Json格式,由于var PATIENT_ID=getIdSelections();其中PATIENT_ID是数组,所以必须转成字符串. $('#table').on(' ...
- iOS:选择器控件UIPickerView的详解和演示
选择器控件UIPickerView: 功能:它能够创建一个类似于密码锁式的单列或多列的选择菜单,用户可以通过它设置的代理来选择需要菜单中的任意的数据.例如创建日历.字体表(类型.大小.颜色).图库等. ...
- Nginx 安装
1 编译环境 yum -y groupinstall "Development Tools" "Server Platform Development" 2 ...
- pip install 安装python-requests
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-requests
- Android出现java.net.SocketException: Permission denied报错
是由于权限问题导致的,在manifests中找到AndroidManifest.xml 在manifest节点下新增 <uses-permission android:name="an ...
- sql语句注意事项
1两表根据a字段关联,把t2表中的c字段值更新到t1表中的c字段update T1set T1.C =(select T2.C from T2 where T1.A = T2.A)where exis ...