Android获取长按按键响应

public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    return super.onKeyLongPress(keyCode, event);
}

不能正常响应的原因:


onKeyDown()中没有对短按,长按事件进行识别。如要对长按事件进行响应,要在onKeyDown()中添加如下代码:
if (event.getRepeatCount() == 0) {
      event.startTracking();
      isLongPressKey = false;
}else{
      isLongPressKey = true;
}

onKeyDown()代码示例如下:
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    Log.d(TAG,"---->>onKeyDown():keyCode="+keyCode);
    switch(keyCode){
         case KeyEvent.KEYCODE_MENU://需要识别长按事件
         case KeyEvent.KEYCODE_ENTER:
         case KeyEvent.KEYCODE_DPAD_CENTER: 
            if (event.getRepeatCount() == 0) {//识别长按短按的代码
                event.startTracking();
                isLongPressKey = false;
            }else{
                isLongPressKey = true;
            }
             return true;
         case KeyEvent.KEYCODE_VOLUME_UP:
         case KeyEvent.KEYCODE_DPAD_UP:              
 
             return true;
         case KeyEvent.KEYCODE_VOLUME_DOWN:
         case KeyEvent.KEYCODE_DPAD_DOWN: 
 
             return true;
    }
    return super.onKeyDown(keyCode, event);
}

要处理onKeyLongPress和onKeyUp的冲突事件


1、添加变量

private boolean lockLongPressKey;//是否长按
2、在onKeyLongPress中
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    lockLongPressKey = true;
    return super.onKeyLongPress(keyCode, event);
}
3、在onKeyUp()中要添加冲突处理,如下:
public boolean onKeyUp(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    Log.d(TAG,"---->> onKeyDown():keyCode="+keyCode);
    switch(keyCode){
         case KeyEvent.KEYCODE_MENU:
         case KeyEvent.KEYCODE_ENTER:
         case KeyEvent.KEYCODE_DPAD_CENTER: 
        if(lockLongPressKey){
            lockLongPressKey = false;
            return true;
        }
 
            return true;
         case KeyEvent.KEYCODE_VOLUME_UP:
         case KeyEvent.KEYCODE_DPAD_UP:                  
 
             return true;
         case KeyEvent.KEYCODE_VOLUME_DOWN:
         case KeyEvent.KEYCODE_DPAD_DOWN: 
 
             return true;
    }
    return super.onKeyUp(keyCode, event);
}

注意问题:


添加长按响应以后要在onKeyUp()中添加长按冲突处理,否则长按事件和UP事件响应会同时起作用。

你可能感兴趣的:(Android获取长按按键响应)