1. 程式人生 > 程式設計 >Android物理鍵盤事件解析

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);
 }
}

2.設定監聽

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);
} 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。