代码所在位置:
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
捕捉按键,并实现长按短按
对按键 KeyEvent.KEYCODE_AT 进行捕捉和实现长按、短按
event.getRepeatCount() 读取按键重复次数
event.startTracking() 如果要追踪长按事件,必须调用 event.startTracking()
interceptKeyBeforeDispatching 函数,拦截按钮按下事件,判断是否交给应用层处理,如果返回-1,消耗按键事件;如果返回0,交给应用处理
static boolean mIsATLongPressed = false;
static boolean mIsATLongPressedFirst = true;
/** {@inheritDoc} */
@Override
public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags) {
// .... n行代码
final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
// .... n行代码
if (keyCode == KeyEvent.KEYCODE_AT) {
if (down) {
if (event.getRepeatCount() == 0) {
event.startTracking();