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