You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 10.4.2 FMX安卓应用捕获Zebra扫描器特殊按键求助

Delphi 10.4.2 FMX安卓捕获Zebra扫描器特殊按键解决方案

直接使用Android原生API拦截按键事件

FMX的OnKeyDown/OnKeyUp事件会过滤部分设备专用特殊按键,建议绕过FMX框架,直接通过Android原生API监听按键:

  • 利用TAndroidHelper.OnKeyEvent回调(Delphi 10.4.2支持该接口),直接处理原始按键事件:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  TAndroidHelper.OnKeyEvent := procedure(KeyEvent: JKeyEvent): Boolean
    var
      LKeyCode: Integer;
    begin
      LKeyCode := KeyEvent.getKeyCode;
      // 处理KEYCODE_BUTTON_L1(对应数值102)
      if LKeyCode = 102 then
      begin
        // 替换为你的业务逻辑
        ShowMessage('L1按键触发');
        Result := True; // 标记事件已处理,阻止传递给FMX
      end
      // 处理KEYCODE_BUTTON_R1(对应数值103)
      else if LKeyCode = 103 then
      begin
        // 替换为你的业务逻辑
        ShowMessage('R1按键触发');
        Result := True;
      end;
    end;
end;
  • 若TAndroidHelper.OnKeyEvent无法生效,可通过JNI重写Activity的dispatchKeyEvent方法,直接在Activity层级拦截事件。

检查Zebra设备的按键映射配置

  • 打开Zebra设备自带的DataWedge工具,确认L1/R1按键的输出模式为「标准键盘事件」,避免按键被映射为扫描触发或自定义指令。
  • 若设备有专用按键设置界面,检查是否禁用了L1/R1的键盘事件输出。

验证实际按键码

  • 用adb命令查看原始按键事件,确保使用正确的keycode:
adb shell getevent

按下L1/R1时,查看输出的事件数据,确认实际的keycode数值(部分设备可能存在自定义映射)。

说明FMX事件的局限性

FMX作为跨平台框架,会对Android平台的部分特殊按键(如设备专用键、游戏手柄按键)进行过滤,导致OnKeyDown/OnKeyUp无法捕获事件,直接使用Android原生API是最可靠的解决方案。

内容的提问来源于stack exchange,提问作者andiroid5x 5.1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:18:27