Android Physical Keyboard Event Parsing

  • 2021-11-14 07:02:47
  • OfStack

Preface

Connecting Android devices to physical keyboards is actually a very small requirement. In fact, Android devices themselves support physical keyboards, and dispatchKeyEvent () can monitor physical keyboards. Here, a packaged class is provided to resolve keyboard events. There are many events, you can see the specific KeyEvent this class source code, I only deal with the numeric keypad here.

Implementation mode

1. Keyboard event resolution class


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) {
   // Figures 
   aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_0);
  } else if(keyCode >= KeyEvent.KEYCODE_NUMPAD_0 && keyCode <= KeyEvent.KEYCODE_NUMPAD_9) {
   // Figures 
   aChar = (char) ('0' + keyCode - KeyEvent.KEYCODE_NUMPAD_0);
  } else {
   // Other symbols 
   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);
 }
}

Step 2 Set up Listening


DispatchKeyResolver dr = new DispatchKeyResolver();
 // Setting event callbacks 
 dr.setKeyInputListener(...) 
  
 @Override
 public boolean dispatchKeyEvent(KeyEvent event) {
  // The physical key is determined, and it is the behavior of pressing (avoiding two responses) 
  if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){
   dr.resolveKeyEvent(event)
  }
 return super.dispatchKeyEvent(event);
} 

Related articles: