栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 4.4 如何添加按键流程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 4.4 如何添加按键流程

代码路径:
frameworks/base/data/keyboards/Generic.kl
frameworks/base/data/keyboards/qwerty.kl
/device/sprd/sharkle/common/rootdir/system/usr/keylayout/gpio-keys.kl
frameworks/native/include/input/KeycodeLabels.h
frameworks/native/include/android/keycodes.h
frameworks/base/core/java/android/view/KeyEvent.java
frameworks/base/core/res/res/values/attrs.xml
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
在gpio-keys.kl文件中定义按键,这里定义的按键是十进制和16进制

key 114     VOLUME_DOWN     WAKE
key 115     VOLUME_UP       WAKE
key 116     POWER           WAKE
key 212     CAMERA          WAKE
key 0x210   FOCUS           WAKE

key 700     RECORD_MUTE 

在qwerty.kl文件中也定义了按键,这里定义也是十进制的,这里定义按键和gpio-keys.kl文件中一样的

key 116   POWER             WAKE
key 700     RECORD_MUTE 
key 158   BACK              WAKE_DROPPED
key 230   SOFT_RIGHT        WAKE
key 60    SOFT_RIGHT        WAKE
key 107   ENDCALL           WAKE_DROPPED
key 62    ENDCALL           WAKE_DROPPED
key 229   MENU              WAKE_DROPPED
key 139   MENU              WAKE_DROPPED
key 59    MENU              WAKE_DROPPED
key 127   SEARCH            WAKE_DROPPED
key 217   SEARCH            WAKE_DROPPED

在Generic.kl文件中也定义了按键,这里定义也是十进制的,这里定义按键和gpio-keys.kl文件中一样的

key 700     RECORD_MUTE 
key 116   POWER             WAKE

在keycodes.h文件中定义枚举变量

AKEYCODE_EISU            = 212,
    AKEYCODE_MUHENKAN        = 213,
    AKEYCODE_HENKAN          = 214,
    AKEYCODE_KATAKANA_HIRAGANA = 215,
    AKEYCODE_YEN             = 216,
    AKEYCODE_RO              = 217,
    AKEYCODE_KANA            = 218,
    AKEYCODE_ASSIST          = 219,
    AKEYCODE_BRIGHTNESS_DOWN = 220,
    AKEYCODE_BRIGHTNESS_UP   = 221,
    AKEYCODE_MEDIA_AUDIO_TRACK = 222,
    AKEYCODE_RECORD_MUTE = 300,
	AKEYCODE_RECORD_SELECT = 301,
	AKEYCODE_RECORD_OK = 302,

在KeycodeLabels.h文件中KEYCODES[]数组中定义需要添加的变量

static const KeycodeLabel KEYCODES[] = {
    { "SOFT_LEFT", 1 },
    { "SOFT_RIGHT", 2 },
    { "HOME", 3 },
    { "BACK", 4 },
    { "CALL", 5 },
    { "BRIGHTNESS_DOWN", 220 },
    { "BRIGHTNESS_UP", 221 },
    { "MEDIA_AUDIO_TRACK", 222 },
    { "RECORD_MUTE", 300 },
	{ "RECORD_SELECT", 301 },
	{ "RECORD_OK", 302 },
    // NOTE: If you add a new keycode here you must also add it to several other files.
    //       Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.

    { NULL, 0 }
};

在attrs.xml文件中定义keycode


        
        
        
           
		
		
    

在KeyEvent.java文件中定义KEYCODE的值

public static final int KEYCODE_RECORD_MUTE = 300;
	public static final int KEYCODE_RECORD_SELECT = 301;
	public static final int KEYCODE_RECORD_OK = 302;
    private static final int LAST_KEYCODE           = KEYCODE_RECORD_OK;

在/PhoneWindowManager.java文件中interceptKeyBeforeDispatching()方法来监听按键的处理

@Override
    public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {
        final boolean keyguardOn = keyguardOn();
        final int keyCode = event.getKeyCode();
        final int repeatCount = event.getRepeatCount();
        final int metaState = event.getmetaState();
        final int flags = event.getFlags();
        final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
        final boolean canceled = event.isCanceled();

        
        //if (DEBUG_INPUT) {
        if (down == true) {
            Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " down=" + down + " repeatCount="
                    + repeatCount + " keyguardOn=" + keyguardOn + " mHomePressed=" + mHomePressed
                    + " canceled=" + canceled);
        }
        //}
        
        
        if (down && isCallWakeKey(keyCode)) {
            if(mKeyguardDelegate != null && !mKeyguardDelegate.isShowing()){
                mPowerManager.scheduleButtonLightTimeout(SystemClock.uptimeMillis());
            }
        }
        
        // If we think we might have a volume down & power key chord on the way
        // but we're not sure, then tell the dispatcher to wait a little while and
        // try again later before dispatching.
        if (mScreenshotChordEnabled && (flags & KeyEvent.FLAG_FALLBACK) == 0) {
            if (mVolumeDownKeyTriggered && !mPowerKeyTriggered) {
                final long now = SystemClock.uptimeMillis();
                final long timeoutTime = mVolumeDownKeyTime + SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS;
                if (now < timeoutTime) {
                    return timeoutTime - now;
                }
            }
            if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
                    && mVolumeDownKeyConsumedByScreenshotChord) {
                if (!down) {
                    mVolumeDownKeyConsumedByScreenshotChord = false;
                }
                return -1;
            }
        }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489465.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号