OpenHarmony系统解决方案 - 输入法弹出时按返回键原页面返回或应用退出 原创 精华
TiZizzz
发布于 2023-8-7 11:30
浏览
1收藏
问题描述
问题环境
系统版本:OpenHarmony-3.2-Release
问题现象
- 打开任意包含输入组件界面的应用,点击输入组件弹出输入法。
- 点击返回按键。
- 输入法隐藏,原应用页面返回或应用退出。
异常效果
点击返回按键,输入法隐藏,原应用页面返回或应用退出。
正常效果
点击返回按键,仅隐藏输入法。
问题原因
由于输入法应用是InputMethodExtensionAbility,窗口由自己创建,所以返回按键的键值指令会被传递到原有应用上,执行原有应用的返回逻辑。而输入法本身可以控制此逻辑,但现在OpenHarmony中的示例输入法并未控制此逻辑,造成问题。
解决方案
以KikaInput输入法应用为例,修改keyboardDelegate的keyDown和keyUp的两个监听回调。
修改应用工程内文件,路径:entry\src\main\ets\model\KeyboardController.ets
定位过程
- 抓取点击返回按键时Ace的Log日志,发现在点击返回时触发了原应用的ProcessBackPressed函数,导致原页面返回或应用退出。
- 追踪返回逻辑,发现是在窗口子系统返回事件回调中触发。
- 抓取窗口子系统日志,发现窗口子系统会把键值分发到输入法(dispatch keyEvent to input method)后再分解输入法的返回分发到Ace(dispatch keyEvent to ACE)中进行处理,当按键抬起时会触发ProcessBackPressed函数。
- 根据上述日志查看分发代码逻辑,发现如果输入法在分发按键事件时,如果返回true则事件不会再向Ace分发。
- 追踪输入法分发事件代码,发现返回值是触发keyboardDelegate.on(type)回调后返回的值。而keyboardDelegate在输入法应用中被使用,所以改动输入法应用的回调
逻辑即可修复此现象。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
赞
5
收藏 1
回复
5
3
1
相关推荐
一下不仅退了输入法,也退了页面,确实反直觉
学习下解决过程
很赞的分享