我想在特定 android 智能手机的部分屏幕上放置一个硬件键盘(就像 Galaxy S7 edge 键盘盖一样)。所以我需要android系统始终只使用未被键盘占用的屏幕部分,即使在全屏视频播放等时也是如此。但是服务需要能够处理被键盘占用的区域的触摸事件键盘。这不需要在启动时工作。
解决方案可能使用股票 android(具有 root 访问权限)或修改后的 LineageOS。
我倾向于认为股票 android 没有解决方案。
但是Android开源项目太复杂了,我找不到地方开始修改。窗口管理器服务、surfaceflinger 还是其他?
我的意图是修改 surfaceflinger 将是最通用的解决方案。是否可以修改 surfaceflinger,或者它是否与 HAL 和部分二进制 blob 静态链接?我希望surfaceflinger 不会以任何方式处理触摸事件,对吧?
一个不接触surfaceflinger的模糊想法是修改窗口管理器以要求surfaceflinger创建一个尺寸更小的虚拟显示器作为原生显示器,将其用于任何东西而不是原生显示器,并将其blit到原生显示器。
另一个想法是在窗口管理器中修改窗口的矩形。但我不知道这是否可能(特别是对于全屏视频播放)。
触摸事件也需要修改。顺便问一下,窗口管理器是否路由触摸事件?
是否有任何使用surfaceflinger的android组件直接绕过窗口管理器和我可能的修改?例如,应用程序可能会向 Surfaceflinger 询问屏幕尺寸/分辨率,还是由窗口管理器发送此信息?
有没有更简单的方法?
有什么提示吗?