uni-app uni小程序 SDK中宿主App中MainActivity内的dispatchKeyEvent等事件无法监听
uni-app uni小程序 SDK中宿主App中MainActivity内的dispatchKeyEvent等事件无法监听
示例代码:
// ✅ 监听 FN 键(KeyCode=119)
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == 119) { // FN 键
if (event.getAction() == KeyEvent.ACTION_UP) {
Log.d("KeyEvent", "FN键松开,尝试发送事件");
if (runningMP != null) {
try {
JSONObject obj = new JSONObject();
obj.put("keyCode", 119);
boolean success = runningMP.sendUniMPEvent("onFnButtonDown", obj);
Log.d("KeyEvent", "事件发送结果: " + success);
return true; // 拦截 FN 键
} catch (JSONException e) {
Log.e("KeyEvent", "JSON 异常", e);
}
}
}
return true; // 拦截 FN 键的所有事件(DOWN 和 UP)
}
return super.dispatchKeyEvent(event);
}
操作步骤:
运行uni小程序 SDK demo,监听dispatchKeyEvent,发现未打开小程序之前点击安卓系统返回按钮dispatchKeyEvent可以正常触发,在打开小程序后dispatchKeyEvent不再触发。
预期结果:
dispatchKeyEvent在任何情况下都可以正常触发,或者有无在打开小程序下监听系统按键的方案?我们设备是PDA,需要监听系统按键的点击。
实际结果:
在打开小程序后无法监听dispatchKeyEvent事件
bug描述:
uni小程序 SDK中,在打开小程序之后,宿主App中MainActivity内的dispatchKeyEvent等事件无法监听。如果未打开小程序,可以正常监听。因为打开小程序打开了新的进程,旧的宿主应用无法监听相关事件。
更多关于uni-app uni小程序 SDK中宿主App中MainActivity内的dispatchKeyEvent等事件无法监听的实战教程也可以访问 https://www.itying.com/category-93-b0.html
麻烦看一下~
更多关于uni-app uni小程序 SDK中宿主App中MainActivity内的dispatchKeyEvent等事件无法监听的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在宿主App中监听按键事件,在打开小程序后失效是预期行为。因为小程序运行在独立进程中,宿主Activity的dispatchKeyEvent自然无法接收到小程序窗口的按键事件。
解决方案:
- 使用小程序页面的按键监听 在uni-app小程序的页面中监听按键事件:
// 在小程序页面的 onLoad 或 onReady 中
document.addEventListener('keydown', (event) => {
if (event.keyCode === 119) { // FN键
// 处理按键逻辑
uni.$emit('fnKeyDown', { keyCode: 119 });
}
});
- 通过原生插件扩展 如果需要在多个小程序中复用此功能,建议开发原生插件:
// 创建 UniApp 原生模块
public class KeyEventModule extends UniModule {
@UniJSMethod
public void registerKeyListener() {
// 注册全局按键监听
}
}

