Android Q 按键添加流程详解

  •                   debounce-interval = <2>;/* 按键去抖时间,单位ms,如果出现按键不稳定,请适当加大 */
    
  •                   wakeup-source;
    
  •           };
    

    };




2\. 修改pinmap-sp\*\*3a.c文件

-------------------------



修改方法如下:



+++ /bsp/bootloader/u-boot15/board/spreadtrum/sp9863a_3c10/pinmap-sp9863a.c

@@ -348,8 +348,8 @@ static pinmap_t pinmap[]={

{REG_MISC_PIN_LVDSRF0_DACON, BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_NUL|BIT_PIN_SLP_AP|BIT_PIN_SLP_NUL|BIT_PIN_SLP_OE},//LCM_SOURCE_AVEEEN

{REG_PIN_SPI2_CSN, BITS_PIN_AF(2)},

{REG_MISC_PIN_SPI2_CSN, BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_WPU|BIT_PIN_SLP_CM4|BIT_PIN_SLP_WPU|BIT_PIN_SLP_IE},//PROX_INT

-{REG_PIN_SPI2_DO, BITS_PIN_AF(2)},

-{REG_MISC_PIN_SPI2_DO, BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_NUL|BIT_PIN_SLP_CM4|BIT_PIN_SLP_NUL|BIT_PIN_SLP_OE},//M_RSTN

+{REG_PIN_SPI2_DO, BITS_PIN_AF(3)},

+{REG_MISC_PIN_SPI2_DO, BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_WPU|BIT_PIN_SLP_AP|BIT_PIN_SLP_WPU|BIT_PIN_SLP_IE},//SMART_KEY

{REG_PIN_SPI2_DI, BITS_PIN_AF(3)},

{REG_MISC_PIN_SPI2_DI, BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_WPD|BIT_PIN_SLP_AP|BIT_PIN_SLP_WPD|BIT_PIN_SLP_Z},//NC

{REG_PIN_SPI2_CLK, BITS_PIN_AF(2)},




二、Framework 层添加按键响应方法

=====================



通过`getevent`查看驱动调节的按键值是否上传ok。



命令查看方法如下:



C:\Users\Administrator>adb shell getevent

/dev/input/event2: 0001 0160 00000001

/dev/input/event2: 0000 0000 00000000

/dev/input/event2: 0001 0160 00000000

/dev/input/event2: 0000 0000 00000000




其中:  

`0160`: 是十六进制数,对应十进制数为352.  

`1`,`0`: 是指按下和弹起的动作。



1.在 gpio-keys.kl 文件中添加自定义key值

-----------------------------



在kl文件中我们可以仿照power键添加key 值。



+++ b/Android/device/sprd/sharkl3/common/rootdir/system/usr/keylayout/gpio-keys.kl

@@ -3,3 +3,4 @@ key 115 VOLUME_UP WAKE

key 116 POWER WAKE

key 212 CAMERA WAKE

key 0x210 FOCUS WAKE

+key 352 KEY_OK WAKE




这样就可以完成物理按键 kl 文件到 KEY\_OK的映射。



这个kl 文件是通过`DeviceCommon.mk`中编译到系统中,在手机/system/usr/keylayout目录下可以找到。  

不同平台代码可能存在差异。



`device\sprd\sharkl3\common\DeviceCommon.mk`的部分代码如下:



PRODUCT_COPY_FILES += \

$(LOCAL_PATH)/rootdir/root/init.common.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.common.rc \

$(LOCAL_PATH)/recovery/init.recovery.common.rc:root/init.recovery.common.rc \

$(BOARDDIR)/recovery/init.recovery.$(TARGET_BOARD).rc:root/init.recovery.$(TARGET_BOARD).rc \

$(LOCAL_PATH)/rootdir/system/usr/keylayout/gpio-keys.kl:$(TARGET_COPY_OUT_VENDOR)/usr/keylayout/gpio-keys.kl \



2\. 在Generic.kl 文件中添加key 值

--------------------------



修改方法如下:



+++ b/Android/frameworks/base/data/keyboards/Generic.kl

@@ -299,7 +299,7 @@ key 317 BUTTON_THUMBL

key 318 BUTTON_THUMBR

-# key 352 “KEY_OK”

+key 352 KEY_OK

key 353 DPAD_CENTER

key 354 “KEY_GOTO”

key 355 “KEY_CLEAR”




3.在 qwerty.kl文件中添加key值

----------------------



修改方法如下:



+++ b/Android/frameworks/base/data/keyboards/qwerty.kl

@@ -129,3 +129,4 @@ key 581 STEM_PRIMARY

key 582 STEM_1

key 583 STEM_2

key 584 STEM_3

+key 352 KEY_OK




4.在Native 层添加keycode 值与标签

-------------------------



注意下面的289 keycode 值,是延续上面288 keycode 的值,跟驱动上报的352不一样,那是底层的数值,上层最好跟底层差分。



修改方法如下:



+++ b/Android/frameworks/native/include/android/keycodes.h

@@ -776,8 +776,11 @@ enum {

 AKEYCODE_THUMBS_DOWN = 287,

 /** Used to switch current account that is consuming content.

  * May be consumed by system to switch current viewer profile. */
  • AKEYCODE_PROFILE_SWITCH = 288

  • AKEYCODE_PROFILE_SWITCH = 288,

  • /**

  •   *Nokia custom key 
    
  •   **/
    
  • AKEYCODE_KEY_OK = 289,




同样我们仿照288的定义,在InputEventLabels.h 添加标签定义



+++ b/Android/frameworks/native/include/input/InputEventLabels.h

@@ -328,7 +328,7 @@ static const InputEventLabel KEYCODES[] = {

 DEFINE_KEYCODE(THUMBS_UP),

 DEFINE_KEYCODE(THUMBS_DOWN),

 DEFINE_KEYCODE(PROFILE_SWITCH),
  • DEFINE_KEYCODE(KEY_OK),



5\. 在attrs.xml 中添加属性值

---------------------



修改方法如下:



+++ b/Android/frameworks/base/core/res/res/values/attrs.xml

@@ -1924,6 +1924,7 @@

     <enum name="KEYCODE_THUMBS_UP" value="286" />

     <enum name="KEYCODE_THUMBS_DOWN" value="287" />

     <enum name="KEYCODE_PROFILE_SWITCH" value="288" />
  •           <enum name="KEYCODE_KEY_OK" value="289" />
    



6.在KeyEvent 中添加key 值方便PhoneWindowMangager中调用

--------------------------------------------



修改方法如下:



+++ b/Android/frameworks/base/core/java/android/view/KeyEvent.java

@@ -823,6 +823,11 @@ public class KeyEvent extends InputEvent implements Parcelable {

  * consuming content. May be consumed by system to set account globally.

  */

 public static final int KEYCODE_PROFILE_SWITCH = 288;
  •    /**
    
  • * Integer value of the last KEYCODE. Nokia custom  ok key.
    
  • * @hide
    
  • */
    
  •   public static final int KEYCODE_KEY_OK = 289;
    



7\. 最后我们在PhoneWindowManager 中处理按键行为

-----------------------------------



调通之后,我们就可以在PWM 的`interceptKeyBeforeDispatchingInner`方法处理我们想做的事情,比如 吊起Google Assist等。



+++ b/Android/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

@@ -2870,7 +2870,15 @@ public class PhoneWindowManager extends AbsPhoneWindowManager implements WindowM

     if (mPendingCapsLockToggle && !KeyEvent.isMetaKey(keyCode) && !KeyEvent.isAltKey(keyCode)) {

         mPendingCapsLockToggle = false;

     }
  •           // add for key ok
    
  •           if(keyCode == KeyEvent.KEYCODE_KEY_OK){
    
  •                   if("Nokia_India".equals(android.os.Build.CUSTOMER_SKU)){
    
  •                     // launch Google Assist
    
  •                     launchAssistAction(null, event.getDeviceId());
    
  •                   }
    
  •                   return -1;
    
  •           }
    
  •           // add for key ok
    



##### 关注程序员Android,回复`按键添加`,既可获取完整代码。



至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除。同时感谢您的阅读,期待您的关注。



![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9LTjFGdTVkenc4ck5hdHJKSGg3UGlhOFByNUlpY1ptd2lhRG9pYVRjSWlhandjaWI2bzlJa2UzbFlMVFNXaWNhZGU2QUVMd1FVMTFqbGxWUWJyQk1XRjZGanJiTWcvNjQw?x-oss-process=image/format,png)

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值