android 添加物理按键

    最近在高通平台上面做一款项目,有一个物理的蓝牙开关键,需添加此按键的响应。现把添加流程记录下来,以防日后遗忘。

    1,硬件,驱动的中断相应。

         在 kernel/include/linux/input.h 中定义KEY_BLUETOOTH

         在 kernel/arch/arm/mach-msm/board-msm7627a-io.c 中和中断对应   (不是做驱动的,猜测)

                                 [KEYMAP_INDEX(3, 4)] = KEY_BLUETOOTH, //bluetooth


     2,由于event类型的名字在这个平台上是7x27a_kp, 所以在 device 里面寻找对应项目的 7x27a_kp.kl 文件。添加

                # Bluetooth keys
                key 237   BLUETOOTH         WAKE_DROPPED

                此处 237 是在驱动中定义的键值。 BLUETOOTH 是 和上层的键名对应。

     3, 在 frameworks/base/include/ui/KeycodeLabels.h 中添加

               { "BLUETOOTH", 211 }, 

               就这样,底层传过来的237键值,到了上层,就变成了 211 。 

     4,在 frameworks/base/core/java/android/view/KeyEvent.java 中定义 

               public static final int KEYCODE_BLUETOOTH      = 211; 

               这样, 上层应用对应的键名产生了

               注: 要注意  private static final int LAST_KEYCODE           =   KEYCODE_BLUETOOTH;

     5,frameworks/base/core/res/res/values/attrs.xml 中添加 

               <enum name="KEYCODE_BLUETOOTH" value="211" />


      6,在 frameworks/base/native/include/android/keycodes.h 添加

                 AKEYCODE_BLUETOOTH       = 211,

      7,在 frameworks/base/libs/ui/Input.cpp 中判断isSystemKey(int32_t keyCode)

                 case AKEYCODE_FOCUS:
                 case AKEYCODE_SEARCH:
+               case AKEYCODE_BLUETOOTH:

                  return ture;

       8, ok,添加了以上的文件后,我们就应该能在应用层onkeyDown 事件中捕获到 KeyEvent.KEYCODE_BLUETOOTH 了。由于此按键在开机任何情况下都能响应bluetooth的开关,所以需在 frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 中做处理。 

               在 interceptKeyBeforeQueueing 函数中, 添加 

                                        case KeyEvent.KEYCODE_BLUETOOTH: {
                                           if(down){
                                                 BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                                                 if (bluetoothAdapter.isEnabled()) {
                                                     bluetoothAdapter.disable();
                                                 } else {
                                                     bluetoothAdapter.enable();
                                                 }
                                            }
                                            break;
                                         }


           搞定! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值