按键长按的一种监听方法

监听按键长按有很多方法,这个是和onkeyDown等并列提供的

一种标准方法,只是直接使用不能起作用,需要一些处理才行。

   1.必现在onKeyDown 中将第一次的消息return true;

然后调用event.startTracking();

  2.可以在覆写的onKeyLongPress函数中监听到这个按键长按的事件并

做处理。

  最初从福州出差期间,我始终不明白这个东西是干什么用的,就在昨天我

关机睡觉的时候才想明白了,关机时的电源键需要长按才起作用,你短按一下

没用的。顿时醒悟,或许我们一会可以用到,请各位同仁珍藏。

  谢谢。

  附件是这个Demo的工程,操作起来主要是看log。


/**
 *    这个Demo是用于监听onKeyLongPress函数的,
 * 一般情况下,这个函数是不会被调用的,需要做些特殊
 * 处理,才能监听到按键的长按事件,除KEYCODE_ENTER
 * 和KEYCODE_DPAD_CENTER之外的按键。不同于view的
 * onLongClickListener。
 *    应用情景,比如长按一个按键,然后响应事件。
 *    KeyEvent的Callback回调中,只有这个函数是我们
 * 不熟悉且没有使用到的。另外的onKeyDown和onKeyUp和
 * onKeyMultiple都是我们常用的,这里不赘述。
 *    这里以按键E做测试。
 * @author dingran
 *
 */
public class LongPressTestActivity extends Activity {

    private final String TAG = "dingran.longpress.test.LongPressTestActivity";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    // KEYCODE_ENTER 不行

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.d(TAG, "onKeyDown keyCode = "+keyCode);
//        Log.d(TAG, ""+ 1/0);
        if(keyCode == KeyEvent.KEYCODE_E && event.getRepeatCount() == 0){
            event.startTracking();
            return true;
        }else{
            return false;
        }
        
//        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        Log.d(TAG, "onKeyLongPress keyCode = "+keyCode);
        if(keyCode == KeyEvent.KEYCODE_E){
            Log.d(TAG, "onKeyLongPress KEYCODE_E");
            return true;
        }
        
        return super.onKeyLongPress(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        Log.d(TAG, "onKeyUp");
        Log.d(TAG, "onKeyUp "+event.getFlags());
        int flag = KeyEvent.FLAG_CANCELED | KeyEvent.FLAG_CANCELED_LONG_PRESS;
        Log.d(TAG, "onKeyUp flag = "+flag);
        if(event.getFlags() == flag){
            Log.d(TAG, "onKeyUp in long press up");
        }
        
        return super.onKeyUp(keyCode, event);
    }

    
} 

你可能感兴趣的:(android消息处理)