我試圖重寫音量按鈕作爲上/下箭頭鍵(即它們應該將重點圍繞我所有的活動的重點,能夠查看。)如何欺騙箭頭鍵來我的活動在Android
爲此,我重寫我的活動dispatchKeyEvent()
方法注意事項,我也嘗試過onKeyDown()
,但我的音量按鍵事件的某些部分仍在進入系統,當您更改音量時,我的設備發出聲音反饋。我仍然可以聽到嘟嘟聲,但音量並未真正改變。切換到dispatchKeyEvent()
帶走了系統發出的嘟嘟聲。
這裏是我當前dispatchKeyEvent()
方法:
@Override
public boolean dispatchKeyEvent(KeyEvent ke){
int keyCode = ke.getKeyCode();
if(ke.getAction() == KeyEvent.ACTION_DOWN){
print("press " + keyCode);
if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
mTxt.postDelayed(pressDown, 600);
return true;
}else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP)
{
KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP);
dispatchKeyEvent(key);
return true;
}
}else if(ke.getAction() == KeyEvent.ACTION_UP){
print("release " + keyCode);
if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN)
{
/*KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN);
dispatchKeyEvent(keyUp);*/
return true;
}else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP)
{
KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_UP);
dispatchKeyEvent(keyUp);
return true;
}
}
return super.dispatchKeyEvent(ke);
}
它被設置現在它使用上下不同的技術,但無論是否工作正常轉移焦點的方式。對於向上鍵,我只需手動調用dispatchKeyEvent()傳遞d-pad向上鍵和發生在音量按鈕上的相同動作(所以當我按下它時按下,當我釋放時它應該釋放)我對向上按鈕輸出看起來是這樣的:
press 24
press 19
release 24
release 19
了向下按鈕我調整稍微因爲我想,也許一個事實,即DPAD按發生的事情體積釋放打破之前,所以我做了一個可運行這將同時按下並釋放dpad按鈕
pressDown = new Runnable(){
@Override
public void run(){
KeyEvent key = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN);
dispatchKeyEvent(key);
KeyEvent keyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN);
dispatchKeyEvent(keyUp);
}
};
而且我延遲部分秒鐘以便我有機會釋放音量即我的下鍵輸出看起來是這樣的:
press 25
release 25
press 20
release 20
如果我插上USB鍵盤到我的設備,然後按方向鍵的焦點正確地移動,我看到輸出達:
press 19
release 19
和下降:
press 20
release 20
唯一的區別(只要我可以告訴)是,當我按下鍵盤上的箭頭的焦點其實正確地移動,當我按下不動彈VO lume按鈕(欺騙箭頭按鈕)
我可以在這裏忽略某些東西嗎?任何人都可以幫助我弄清楚如何欺騙我的活動箭頭鍵,以便他們實際上將焦點正確移動?