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