Android物理鍵盤事件解析

前言

Android設備連接物理鍵盤其實是個挺小衆的需求,其實Android設備本身就是支持物理鍵盤,dispatchKeyEvent()這個方法就可以監聽物理鍵盤,這裏提供一個封裝的類,解析鍵盤事件。有很多事件,具體可以去看KeyEvent這個類的源碼,我這裏只處理的數字鍵盤。

實現方式

  1. 鍵盤事件解析類
public class DispatchKeyResolver {

    public OnKeyInputListener keyInputListener;

    public void resolveKeyEvent(KeyEvent event) {
        getInputChar(event);
    }

    public void getInputChar(KeyEvent event) {
        int keyCode = event.getKeyCode();
        char aChar;
        if(keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
            //數字
            aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_0);
        } else if(keyCode >= KeyEvent.KEYCODE_NUMPAD_0 && keyCode <= KeyEvent.KEYCODE_NUMPAD_9) {
            //數字
            aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_NUMPAD_0);
        } else {
            //其他符號
            switch(keyCode) {
                case KeyEvent.KEYCODE_PERIOD:
                    aChar = '.';
                    break;
                case KeyEvent.KEYCODE_NUMPAD_DOT:
                    aChar = '.';
                    break;
                default:
                    return;
            }
        }
        keyInputListener.onKeyInput(aChar);
    }

    public void setKeyInputListener(OnKeyInputListener keyInputListener) {
        this.keyInputListener = keyInputListener;
    }

    public interface OnKeyInputListener {
        void onKeyInput(char aChar);
    }
}

  1. 設置監聽
   DispatchKeyResolver dr = new DispatchKeyResolver();
   //設置事件回調
   dr.setKeyInputListener(...) 
       
   @Override
   public boolean dispatchKeyEvent(KeyEvent event) {
        //物理鍵確定,並且是按下的行爲(避免兩次響應)
       if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){
           dr.resolveKeyEvent(event)
       }
   	return super.dispatchKeyEvent(event);
   }    
   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章