Android全局键(home键_长按耳机键)详解【android源码解析八】
Android全局键(home键_长按耳机键)详解【android源码解析八】
Android的全局键(home键/长按耳机键)详解【android源码解析八】Android的全局键(home键/长按耳机键)详解【android源码解析八】
如果想在Android手机要想扩展一个实体键,就我知道而言有两种方法,基于Android4.0的源码来分析的与2.3的源码有点区别,区别不大,下面分享给大家:
转载请标明出处:
(一)可以在frameworks层的KeyEvent.java这个类中定义一个值,在PhoneWindowManager.java这个类中做处理就可以了。(Home键就是这么实现的)。效果图如下:
(二)可以利用广播的形式,frameworks层PhoneWindow.java这个类的onKeyDown( )对这个实体键发广播,上层接受这个广播来处理也可以达到这个效果。耳机键就是利用广播来接受的。无论在哪个界面长按耳机键,都会进入到音乐的界面。(长按耳机键的)效果图如下:
下面我详细展开来说明一下:
一、先说Home键的实现的大致流程,即---->为什么点击Home键,都进入到launcher的待机界面;
(1)Home键的定义在
step1: frameworks/base/core/java/android/view/KeyEvent.java这个类中,在KeyEvent.java这个类中有个static的静态块:
static { populateKeycodeSymbolicNames(); }
step2: 这个populateKeycodeSymbolicNames()方法其实就是加载了许多键的定义,把这些键对应的值都放到Array数组中。
private static void populateKeycodeSymbolicNames() { SparseArray names = KEYCODE_SYMBOLIC_NAMES; names.append(KEYCODE_UNKNOWN, "KEYCODE_UNKNOWN"); names.append(KEYCODE_SOFT_LEFT, "KEYCODE_SOFT_LEFT"); names.append(KEYCODE_SOFT_RIGHT, "KEYCODE_SOFT_RIGHT"); names.append(KEYCODE_HOME, "KEYCODE_HOME"); names.append(KEYCODE_BACK, "KEYCODE_BACK"); names.append(KEYCODE_CALL, "KEYCODE_CALL"); names.append(KEYCODE_ENDCALL, "KEYCODE_ENDCALL"); names.append(KEYCODE_0, "KEYCODE_0"); names.append(KEYCODE_1, "KEYCODE_1"); names.append(KEYCODE_2, "KEYCODE_2"); names.append(KEYCODE_3, "KEYCODE_3"); names.append(KEYCODE_4, "KEYCODE_4"); names.append(KEYCODE_5, "KEYCODE_5"); names.append(KEYCODE_6, "KEYCODE_6"); names.append(KEYCODE_7, "KEYCODE_7"); names.append(KEYCODE_8, "KEYCODE_8"); names.append(KEYCODE_9, "KEYCODE_9");
step3: 而Home键对应的值如下:
/** Key code constant: Home key. * This key is handled by the framework and is never delivered to applications. */ public static final int KEYCODE_HOME = 3;
(2)Home键的处理如下:在 step1: frameworks/base/policy/src/com/android/internal/pol