最近在分析一个客户问题:设备在使用一段时间后,输入法框diag无法正常显示。

public class InputMethodManagerService extends IInputMethodManager.Stubimplements ServiceConnection, Handler.Callback {static final boolean DEBUG = false;static final String TAG = "InputMethodManagerService";@Retention(SOURCE)@IntDef({ShellCommandResult.SUCCESS, ShellCommandResult.FAILURE})private @interface ShellCommandResult {int SUCCESS = 0;int FAILURE = -1;}
public class InputManagerService extends IInputManager.Stubimplements Watchdog.Monitor {static final String TAG = "InputManager";static final boolean DEBUG = false;

将上述两个地方的DEBUG设置为true后,发现输入法show hide流程log都是正常的。
同时输入法异常时,home和recent键失效。

通过分析客户的代码发现,可以app 在接受网络消息后,通过disableKeyguard hide 锁屏界面,此时设备最上层app显示。
但是由于锁屏并没有真正disable,而是在上层app之下。

继续分析InputMethod发现,在InputMethodManagerService.java 中存在是否锁屏的判断

    private boolean isScreenLocked() {return mKeyguardManager != null&& mKeyguardManager.isKeyguardLocked() && mKeyguardManager.isKeyguardSecure();}
InputMethodSubtypeSwitchingController.java public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeList(boolean includeAuxiliarySubtypes, boolean isScreenLocked) {final ArrayList<ImeSubtypeListItem> imList = new ArrayList<>();final HashMap<InputMethodInfo, List<InputMethodSubtype>> immis =mSettings.getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked(mContext);if (immis == null || immis.size() == 0) {return Collections.emptyList();}if (isScreenLocked && includeAuxiliarySubtypes) {if (DEBUG) {Slog.w(TAG, "Auxiliary subtypes are not allowed to be shown in lock screen.");}includeAuxiliarySubtypes = false;}mSortedImmis.clear();mSortedImmis.putAll(immis);for (InputMethodInfo imi : mSortedImmis.keySet()) {if (imi == null) {continue;}

Slog.w(TAG, “Auxiliary subtypes are not allowed to be shown in lock screen.”); 上述log,说明google设计思路,在没有解锁时,输入法diag是不允许显示。

解决方案:
在systemui中处理解锁流程。具体略

同时可以通过 adb shell dumpsys window p 来判断输入法可以弹框。

输入法框无法正常显示问题相关推荐

  1. Windows 右下角 输入法 图标 不见了 显示输入法 图标 绝对成功

    Windows 右下角 输入法 图标 不见了 显示输入法 图标 绝对成功 开始菜单运行"ctfmon"命令, 重新启动系统后,你会发现输入法图标重新出现了,而且所有安装的输入法全部 ...

  2. vue点击input框出现弹窗_vue组件实现弹出框点击显示隐藏效果

    本文实例为大家分享了vue实现弹出框点击显示隐藏的具体代码,供大家参考,具体内容如下 效果如下图 由于我的更改密码弹出框是一个组件引用的,所以在一开始是隐藏的,这就需要在当前的页面上对弹出框组件设置v ...

  3. html文本框 控件,标签和文本框都用于显示文本

    用标签和文本框都可以显示文本信息,二者有什么区别 标签和文本框控件都可以显示文本,它们之间有什么区别?标签只能显示一横... 文本框可以显示很多横... 不对.标签框(Label)不能输入文本. VB ...

  4. vue组件弹出框点击显示隐藏

    1. vue组件弹出框点击显示隐藏 转载于:https://www.cnblogs.com/knuzy/p/9525852.html

  5. Android监听系统输入法键盘弹出显示与隐藏事件

    Android监听系统输入法键盘弹出显示与隐藏事件 有时候需要监听Android系统输入法的弹出显示事件,比如:微信聊天时,不管你当前在聊天中的什么位置(上滑查看消息历史),每当你点击输入框时,都会自 ...

  6. 解决百度地图搜索框在底层显示不出来

    /*解决百度地图搜索框在底层显示不出来*/ 官方出的补丁,把这个放在html顶端即可 <style type="text/css"> .tangram-suggesti ...

  7. Ubuntu16.04搜狗拼音输入法候选栏无法显示中文(英文乱码)

    Ubuntu16.04搜狗拼音输入法候选栏无法显示中文(英文乱码) 输入中文时,若候选栏显示英文乱码.无法显示中文,如下图所示,可按如下方式处理: cd ~/.config rm -rf SogouP ...

  8. vue el-element中el-select的el-option选中值,但页面框中不显示值,需要输入一个其他框值才显示,input同理

    问题描述: el-element中el-select的el-option选中值,但页面框中不显示值,需要输入一个其他框值才显示.或者解决input无法输入值. //在el-select中写一个事件 @ ...

  9. select下拉框选中不显示

    select下拉框选中不显示 1.浏览器缓存问题,可以尝试清楚浏览器缓存 2.代码问题,先查看代码是否正确, 3.编译问题,重新编译代码即可

最新文章

  1. mysql 故障处理_MySQL日志故障的处理和分析
  2. STM32跑分?看看你的能跑多少分!
  3. swift5的SnipKit框架使用
  4. EyeQ Ultra 芯片 面向自动驾驶
  5. 修改MySQL中字段的类型和长度
  6. Atitit 多元化战略 适合我们发展 的核心业务attilax总结
  7. 注册测绘师考试复习视频资料
  8. SIR传染病模型(微分方程系列1)
  9. HMTL5高拍仪开发包(支持谷歌 百度 火狐 360 QQ IE10以上等浏览器)
  10. 居民小区变配电电力监控系统-安科瑞苏月婷
  11. 详解正向代理与反向代理
  12. ChemDraw19激活中文版下载化学绘图软件教程
  13. 中职教计算机专业发展,中等职业教育中计算机专业教育思考
  14. python弹幕分析_用Python抓取bilibili弹幕并分析
  15. 【本科生科研入门】英文科技论文写作-绘图篇
  16. android 10系统下载地址,Android 10正式版
  17. 使用MATLAB快速提取图片数据
  18. 用python控制钉钉软件_python 调用钉钉机器人的方法
  19. Mysqlworkbench汉化步骤
  20. Linux美化贴图!

热门文章

  1. android小说阅读、MVP + RxJava + Retrofit项目、证件拍照裁剪、蓝牙锁等源码
  2. xiuno 邮箱设置
  3. 李峋爱心代码 程序员教你用代码制作爱心网页[樱花+爱心],正好拿去送给女神给她个惊喜
  4. 解决 zbrush导出的模型在blender里没有颜色的问题
  5. Android短信Messaging数据库字段分析
  6. 计算机基本单位——位、字节、字、字长
  7. 富士通笔记本最新系统恢复方法——系统工具恢复
  8. Excel打印时完整显示合并的单元格区域
  9. cuda安装以及conda安装对应版本的pytorch-gpu
  10. 基于unity3D的趣味桌球游戏开发