我正在尝试捕获设备上可用的硬件键盘上的所有键。这个设备带有功能键(至少我可以将硬件键映射到Fire F2和F4)。
每次按F2或F4时,设备都使用分配给这些键的系统功能。对于F2,它暂停(休眠)设备,而F4显示应用程序切换屏幕。
我可以得到从F1到F10的所有其他功能键,除了那些F2和F4。
adb shell getevent -lt /dev/input/event4
[ 1141.537066] EV_MSC MSC_SCAN 00000000
[ 1141.537096] EV_KEY KEY_F1 DOWN
[ 1141.537096] EV_SYN SYN_REPORT 00000000
[ 1141.752672] EV_MSC MSC_SCAN 00000000
[ 1141.752672] EV_KEY KEY_F1 UP
[ 1141.752703] EV_SYN SYN_REPORT 00000000
[ 1143.004565] EV_MSC MSC_SCAN 00000001
[ 1143.004565] EV_KEY KEY_F2 DOWN
[ 1143.004595] EV_SYN SYN_REPORT 00000000
[ 1143.202959] EV_MSC MSC_SCAN 00000001
[ 1143.202990] EV_KEY KEY_F2 UP
[ 1143.202990] EV_SYN SYN_REPORT 00000000
[ 1144.610461] EV_MSC MSC_SCAN 00000002
[ 1144.610461] EV_KEY KEY_F3 DOWN
[ 1144.610491] EV_SYN SYN_REPORT 00000000
[ 1144.808031] EV_MSC MSC_SCAN 00000002
[ 1144.808031] EV_KEY KEY_F3 UP
[ 1144.808062] EV_SYN SYN_REPORT 00000000
[ 1146.466601] EV_MSC MSC_SCAN 00000003
[ 1146.466631] EV_KEY KEY_F4 DOWN
[ 1146.466631] EV_SYN SYN_REPORT 00000000
[ 1146.670946] EV_MSC MSC_SCAN 00000003
[ 1146.670977] EV_KEY KEY_F4 UP
[ 1146.670977] EV_SYN SYN_REPORT 00000000
在WindowsMobile6设备上,许多F键都有这个问题,但可以通过使用WM SDK中的allkeys(true)轻松解决。
键是正确生成的,正如我在adb shell getvent中看到的那样…
在Android Java应用程序中,我需要什么代码才能获得F2和F4?
更新:代码(尽管标准)
edit1.setKeyListener(new KeyListener() {
@Override
public int getInputType() {
return InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_CLASS_TEXT;
}
@Override
public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) {
String name = getResources().getResourceEntryName(view.getId());
String action = "onKeyDown";
final String message = "[KeyEvent, {name:" + name +
"},{action:" + action +
"},{code:" + String.valueOf(keyCode) +
"},{chars:" + event.getCharacters() +
"},{char:" + event.getUnicodeChar() +
"},{scode:" + event.getScanCode() +
"}]";
Log.d(TAG, message);
addLog(message);
return false;
}
完整测试代码
https://github.com/hjgode/KeyTest/blob/master/app/src/main/java/com/example/e841719/keytest/KeyTest.java