精华内容
下载资源
问答
  • android 添加自定义按键
    千次阅读
    2014-01-24 18:12:16

    (1)mediatek\config\hexing72_wet_jb3\mtk-kpd.kl(这个路径根据具体项目,有具体变化)

    (2)frameworks\base\include\androidfw\KeycodeLabels.h

    (3)frameworks\base\core\res\res\values\attrs.xml

    (4)frameworks\base\core\java\android\view\KeyEvent.java

    (5)frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java

    更多相关内容
  • 举例:添加一个"屏幕旋转键(rotate key)" 1,linux内核定义一个按键扫描码 在按键的配置文件中设置扫描码,比如dts中 rotate-key { linux,code = <760>; label = "rotate"; rockchip,adc_value = <355&...

    举例:添加一个"屏幕旋转键(rotate key)"

    1,linux内核定义一个按键扫描码
    在按键的配置文件中设置扫描码,比如dts中
    rotate-key {
                linux,code = <760>;
                label = "rotate";
                rockchip,adc_value = <355>;
            };
    其中“linux,code”就是按键扫描码,其定义在kernel\arch\arm64\boot\dts\include\dt-bindings\input\linux-event-codes.h中,最大值为767(0x2ff)
    #define KEY_MAX            0x2ff

    2,修改键值映射表rk29-keypad.kl
    在device\rockchip\common\rk29-keypad.kl中添加
    key 760 ROTATE

    3,定义android键值
    ./frameworks/native/include/input/InputEventLabels.h中添加    
    DEFINE_KEYCODE(ROTATE),

    4,
    ./frameworks/native/include/android/keycodes.h中添加
    AKEYCODE_ROTATE             = 300

    5,
    ./frameworks/base/core/res/res/values/attrs.xml添加
    <enum name="KEYCODE_ROTATE" value="300" />

    6,
    ./frameworks/base/core/java/android/view/KeyEvent.java添加
    public static final int KEYCODE_ROTATE = 300;

    7,
    ./frameworks/base/api/system-current.txt添加
    field public static final int KEYCODE_ROTATE = 300;
    ./frameworks/base/api/current.txt添加
    field public static final int KEYCODE_ROTATE = 300;

    8,处理按键消息
    ./frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java中interceptKeyBeforeDispatching函数中添加

    if (keyCode == KeyEvent.KEYCODE_ROTATE) {

    展开全文
  • 一、给自定义按键添加广播 修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法 /frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @Override public long ...
  • 本帖最后由 Xinxin_2011 于 2014-11-12 08:39 编辑网上存在一些关于Android系统添加自定义按键的文章,但大多针对Android2.3和4.0系统的,许多文件都已经变动位置了,这两天我总结了一些,写出来欢迎大家交流与指正...

    本帖最后由 Xinxin_2011 于 2014-11-12 08:39 编辑

    网上存在一些关于Android系统添加自定义按键的文章,但大多针对Android2.3和4.0系统的,许多文件都已经变动位置了,这两天我总结了一些,写出来欢迎大家交流与指正:

    Android系统通过*.kl文件将Linux按键传给上层,最新的Android4.4已经不再默认qwerty.kl文件了,代之的是frameworks/base/data/keyboards/Generic.kl文件,当然如果定义板级键值文件,还是以rk29-keypad.kl文件优先。

    在3288/device/rockchip/rksdk目录下的rk29-keypad.kl文件中有相关键值的定义:

    key 59    MENU

    key 102   HOME

    key 114   VOLUME_DOWN

    key 115   VOLUME_UP

    key 116   POWE                WAKE

    key 143   NOTIFICATION       WAKE

    key 158   BACK

    key 212   CAMERA

    key 217   SEARCH复制代码

    说明:

    WAKE: 当设备睡眠时按下此键,设备将被唤醒,按键事件将会被发送到应用程序。

    WAKE_DROPPED: 当设备睡眠时按下此键,设备将被唤醒,而按键事件不会被发送到应用程序。

    瑞星微的按键分为GPIO和ADC两种,定义在/kernel/arch/arm/boot/dts目录下的firefly-rk3288.dts文件:

    &adc {

    status = "okay";

    key {

    compatible = "rockchip, key";

    io-channels = ;

    vol-up-key {

    linux, code = <115>;

    label = "volume up";

    rockchip, adc_value = <1>;

    };

    vol-down-key {

    linux, code = <114>;

    label = "volume down";

    rockchip, adc_value = <170>;

    };

    power-key {

    gpios = ;

    linux, code = <116>;

    label = "power";

    gpio-key, wakeup;  // 具有唤醒功能

    };

    menu-key {

    linux, code = <139>;

    label = "menu";

    rockchip, adc_value = <355>;

    };

    home-key {

    linux, code = <102>;

    label = "home";

    rockchip, adc_value = <746>;

    };

    back-key {

    linux, code = <158>;

    label = "back";

    rockchip, adc_value = <560>;

    };

    camera-key {

    linux, code = <212>;

    label = "camera";

    rockchip, adc_value = <450>;

    };

    };复制代码

    先在linux内核中添加新的按键值(当然不用宏定义直接写数值也可以),网上一般写在/include/linux/input/input.h文件中添加,实际3.10内核在/include/uapi/ linux/input.h文件中:

    #defineKEY_RESERVED     0

    #define KEY_ESC         1

    #define KEY_1           2

    ...

    #defineKEY_MY           250

    对于Android层次,在rk29-keypad.kl文件中增加按键值后,还需要修改一些文件,系统才能处理,首先修

    改KeycodeLabels.h文件,4.4版本将其移到了frameworks/native/include/input目录下,对KEYCODES数组添加按键码:

    static const KeycodeLabelKEYCODES[] = {

    ...

    { "MY_KEYS" ,250},

    { NULL,0 }

    最后一定要以NULL结尾,其中的TV_KEYMOUSE_LEFT按键就是瑞星微添加的,再去frameworks/native/include/android/keycode.h文件中添加:enum {

    AKEYCODE_UNKNOWN         = 0,

    ....

    ....

    添加

    AKEYCODE_MY_KEYS  =250,

    同样AKEYCODE_TV_KEYMOUSE_LEFT宏也是瑞星微添加的,如果要添加系统按键值,还需要修改

    frameworks/base/libs/ui/input.java(android4.4已变为frameworks/native/libs/input/input.cpp)文件:

    boolKeyEvent::hasDefaultAction(int32_t keyCode)

    {

    switch (keyCode) {

    case AKEYCODE_HOME:

    case AKEYCODE_BACK:

    ...

    case AKEYCODE_MY_KEYS:

    return true;

    还有下面的:

    boolKeyEvent::isSystemKey(int32_t keyCode) {

    switch (keyCode) {

    case AKEYCODE_MENU:

    ...

    case AKEYCODE_MY_KEYS:

    return true;

    }

    return false;

    }

    还要修改frameworks/base/core/java/android/view/KeyEvent.java文件:

    public staticfinal int KEYCODE_TV_MEDIA_PAUSE = 249;

    public staticfinal int KEYCODE_MY_KEYS        = 250;

    private staticfinal int LAST_KEYCODE = KEYCODE_MY_KEYS;

    注意一定要修改LAST_KEYCODE,下面的populateKeycodeSymbolicNames数组也需要添加:

    names.append(KEYCODE_MY_KEYS, " KEYCODE_MY_KEYS ");

    修改frameworks/base/core/res/res/values/attr.xml文件:

    ...

    对于网上说的/external/webkit/Source/WebKit/android/plugins/ANPKeyCodes.h文件已经移除。

    以上文件都改完之后frameworks/base/api/current.txt也要随之更新,如果未更新,可运行makeupdate-api 进行更新

    如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理。对于按键事件的处理一般如下文件中:

    frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

    @Override

    public intinterceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn)

    {

    ...

    switch (keyCode) {

    case KeyEvent.KEYCODE_VOLUME_DOWN:

    ...

    case KeyEvent. KEYCODE_MY_KEYS:  // 添加处理代码

    展开全文
  • 参考: https://www.cnblogs.com/blogs-of-lxl/p/9490205.html https://blog.csdn.net/u012719256/article/details/52252647 ... 案例一: 蓝牙遥控器连接蓝牙后,按键无反应: getevent 发...

    参考:

    https://www.cnblogs.com/blogs-of-lxl/p/9490205.html

    https://blog.csdn.net/u012719256/article/details/52252647

    https://my.oschina.net/chenshouyong/blog/94147

    案例一:

    蓝牙遥控器连接蓝牙后,按键无反应:

    getevent 发现按键无上报

    Kernel层:

    1、drivers/hid/hid-input.c 驱动中增加对用类别的的key

    此蓝牙遥控器为0X0C  consume类别,故在    case HID_UP_CONSUMER:    /* USB HUT v1.12, pages 75-84 */里面增加:

            case 0x20c: map_key_clear(KEY_VOICE_ASSIST);            break;

            case 0x0dc: map_key_clear(KEY_INPUTSOURCE);        break;

    0x20c 0x0dc 是遥控器定义的值

    KEY_VOICE_ASSIST和KEY_INPUTSOURCE需要自定义,可以在此文件里定义,也可以在include/uapi/linux/input.h 里定义:

    #define KEY_VOICE_ASSIST 582

    展开全文
  • 一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?对keypad来说,涉及到的文件有以下几...
  • 在本篇文章里小编给大家整理的是关于Android系统添加自定义鼠标样式通过按键切换实例详解内容,有需要的朋友们可以学习下。
  • 添加自定义的键值: (1)Kernel层:  ① include/uapi/linux/input.h 中添加: #define KEY_LXL 123  ② drivers/hid/hid-input.c 中添加: case 0x188: map_key_clear(KEY_LXL); break; //其中0x188是HID设备...
  • 一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?对keypad来说,涉及到的文件有以下几...
  • 全志R16平台Android添加自定义按键

    千次阅读 2016-12-19 21:26:33
    先在linux-3.4/inlcude/linux/input/h添加自定义按键#define SOCHIP_EXT1 0x2e8 该键值最好不要跟系统的键值冲突,然后编写linux下的key driver代码。#include &lt;linux/module.h&gt; #include &lt;...
  • /frameworks/base/core/java/android/view/...// 定义添加物理按键 public static final int KEYCODE_PTT = 289; public static final int KEYCODE_SOS = 290; public static final int KEYCODE_HANDS_FREE = 291
  • 一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?对keypad来说,涉及到的文件有以下几...
  • 主要介绍了android自定义形状的按键实例代码,本文分步骤给大家介绍的非常详细,需要的朋友可以参考下
  • 最近有一个需求,要求实现20秒无操作就跳转到一个界面,因为开发初期没有添加BaseActivity,所以再想在APP中实现事件监听就比较难修改,查阅资料发现可以在framework的ViewRootImpl类的内部类...但是添加后发现会有...
  • gpio keys子系统就是为了实现GPIO+按键实现键盘功能。在一些不支持USB键盘的应用场景非常有用。 实现DTS的修改: 这里说明一下键值,如上图中的linux,code对应的值,这个可以在内核原码相关头文件中查到: include...
  • 网上存在一些关于Android系统添加自定义按键的文章,但大多针对Android2.3和4.0系统的,许多文件都已经变动位置了,这两天我总结了一些,写出来欢迎大家交流与指正: Android系统通过*.kl文件将Linux按键传给上层,...
  • Android P 添加自定义按键

    千次阅读 2020-01-08 13:55:16
    1.kernel-4.4/arch/arm64/boot/dts/mediatek/tb8788p1_64_...其中633与634为自定义按键 &keypad { + mediatek,kpd-hw-init-map = <114 633 0 0 0 0 0 0 0 580 634 0 0 0 0 0 0 0 102 158 0 0 0 0 0 0 0 0 0...
  • 一,添加android已有的功能按键 当新增的按键功能是android系统默认自带的, ...二,自定义按键按如下步骤添加,具体可以参考某个已有的按键,在同一位置添加自定义按键 通过命令cat /proc/bus/input/devi
  • 代码路径: ...在PhoneWindowManager.java文件中添加长按和抬起功能 volatile boolean mRecordOkKeyHandled; private void interceptRecordOkLongKeyDown(boolean handled){ mRecordOkKeyHandled = hand
  • 需求:定制物理按键可以转换成别的按键/打开其他应用/发送intent例如:按下 VOLUME_DOWN -> Back key按下 VOLUME_DOWN -> 打开系统某个应用按下 VOLUME_DOWN -> 发送特定intent简单分析:首先想到的是...
  • 工作中遇到这样一个需求,需要为按键添加一个亲情号,提供一个接口启动内置的APK,思考再三决定更改Framework,利用广播机制去实现。 一、代码动态自主启动内置APK 我们都知道Android系统为我们提供了很多服务管理类...
  • android自定义相机带取景框

    热门讨论 2016-11-19 19:54:18
    自定义相机,带取景框和照片预览
  • Android9 framework 按键音调用流程及替换原生按键音、调节按键音音量方法 摘要:按键音的总体逻辑是先找到系统中按键音的资源,然后调用SoundPool.load让系统加载音频资源,加载成功后在onLoadComplete回调中会返回...
  • Android 10 添加一个新物理按键

    千次阅读 2021-11-15 20:17:18
    Android 10 添加一个新物理按键 下面简单记录下如何添加一个新的物理按键 一、kernel修改 kernel/msm-4.19/include/dt-bindings/input/linux-event-codes.h中定义新按键: #define KEY_RFKILL 247 /* Key that ...
  • 为程序的按钮添加按键声音能更好的亲和用户,产生更好的使用体验,下面就是为按键添加声音的方法:public class MainActivity extends Activity {private Button mButton01;private SoundPool sp;//声明一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,436
精华内容 4,974
关键字:

android 添加自定义按键