解决安卓多屏模式输入法报错Display must not be null

输入法服务的启动流程:
输入法服务InputMethodService在应用进程创建时同时创建,
输入法应用程序(Latin IME)需要继承系统的InputMethodService服务,
服务创建过程中会创建绑定Context上下文,过程中会获取display信息。

在这里插入图片描述

最终会在DisplayManagerService中获取Display信息:
在这里插入图片描述

frameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java:893

对比HDMI类型副屏发现Build-in类型副屏中DisplayInfo的flags被设置为
Display.FLAG_PRIVATE,导致getDisplayInfoInternal函数返回null,最终导致输入法服务启动报错。

查找赋值flags的代码如下,只有build-in类型的屏幕在初始化时会将flags默认赋值为FLAG_PRIVATE类型,设置vendor.display.builtin_presentation属性为true修改默认值。该属性设置后副屏可配置输入法,虚拟按键等功能。
在这里插入图片描述

frameworks/base/services/core/java/com/android/server/display/LocalDisplayAdapter.java:606

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值