2011-12-04 28 views
2

尚未找到解决方案。 我想检测一个长按“虚拟”后退键,例如你在银河系s2上找到的那个。检测长按“虚拟”钥匙

我试着检测用户按下按钮时的onKeyDown事件(工作)和用户离开按钮时的onKeyUp事件,但虚拟按键始终触发onKeyUp事件。

我也试着重写onKeyLongPress方法,但这没有帮助。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     mBackKeyDownTime = event.getEventTime(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     mBackKeyUpTime = event.getEventTime(); 
     final long delta = mBackKeyUpTime - mBackKeyDownTime; 
     return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 
+1

你能后的代码,你试过? – 500865

回答

5

尝试用这种...

int LONG_PRESS_TIME = 5000; // Time in miliseconds 
    Handler handler; 
    Runnable longPressed; 

    handler = new Handler(); 
    longPressed = new Runnable() { 
    public void run() { 
    Log.d("LogTag", "Long Pressed"); 
    } 
}; 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
    if (keyCode == KeyEvent.KEYCODE_BACK) 
    { 
      handler.postDelayed(longPressed, LONG_PRESS_TIME); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    if(keyCode == KeyEvent.KEYCODE_BACK) 
    { 
     handler.removeCallbacks(longPressed); 
     return true; 
    } 
    return super.onKeyUp(keyCode, event); 
}