关于Android外设键盘导致系统输入法隐藏的解决方案

Android系统发展到今天,如果你还认为它只是应用于手机的话,那你就out了。现在很多企业在通过Android系统来定制他们的相应的设备,比如影院、餐饮等行业应用相当广泛。企业可以根据自己的业务需求,定制一个完全属于自己的、面向客户的Android设备。就拿影院来说,喜欢看电影的朋友都会发现,在各大影院门口都有自助终端设备,方面客户买票,省去了排队的麻烦。这些设备的实现方案多种多样,对应的系统也是百花争艳。由于Android系统开源特性及其维护方便等独到的优势,越来越多的企业都把业务实现方案转向Android平台。

话题可能扯的有点远,主要是想让大家都知道,目前的Android系统应用广泛。那么,既然设备不止局限于手机,有没有朋友会发现,我们的Android设备在交互的时候都会使用外设键盘或其他的方式,很少采取系统软键盘来输入。这就导致了一个问题,当插入外设键盘的时候,系统软键盘就自动隐藏掉了(这里暂且这么认为,其实并没有隐藏,只是我们看不到而已)。那么如何让系统输入法在插入外设键盘的时候不消失咧?

我在做项目的时候也遇到了这个问题,在解决的过程中也走了一些弯路。还是先说说我走的弯路吧。

问题的现象很简单:插入键盘后系统软键盘消失了。要解决的就是插入外设键盘后系统键盘还在。要解决这个问题,首先要清楚Android的系统输入法是怎么调用显示出来的?为什么插入外设HID键盘后就消失了?

当初最笨的想法是去改驱动,屏蔽HID或者USB中关于KEYBOARD的驱动(当初不知道为什么会有这样的想法,也这样去做了,在Linux源码下面修改drivers下面对应的东西,有效果,但是问题没有解决,最终导致所有的USB外设都不可使用)。悲剧了,这条路走不通,又想从Android源码上做文章。

Android的源码下有专门管理输入的管理类,路径:frameworks\base\services\java\com\android\server,叫InputMethodManagerService.java,这个类是所有输入的总管。我当时是这么想的,只要找出来我拔插外设键盘的时候调用的哪些函数,然后再对这些函数做相应的处理,问题就应该可以解决。好吧,开始这里面改,不断的打断点打印日志,一连2天都在这个类里面还有frameworks\base\services\input下面改来改去,反复编译反复试验,最终还是因为其关联的东西太多了,以失败告终。

最后没办法了,只能从输入法本身想办法。经过一番折腾,我发现每一个输入法都跟Configuration有关,这个Configuration有一项keyboard配置项,一般情况下,keyboard的配置值是nokeys,而当我们插入外设键盘的时候,这个配置值就变了,值是Configuration.KEYBOARD_QWERTY,这个时候系统会将新的Configuration通知所有程序还有输入法,先前弹出的输入法检测到有外设键盘了,马上隐藏起来。当时我就想,能不能在Configuration改变的时候,重新给Configuration的keyboard赋值为nokeys,这样应该是可以解决问题的。

方向找到,立马开始实施。找到系统的输入法源码,路径在packages\inputmethods\PinyinIME\src\com\android\inputmethod\pinyin,有一个类叫PinyinIME.java,这个类继承了InputMethodService,所有的输入法都要继承InputMethodService。然后在onConfigurationChanged(Configuration newConfig)方法中加入三句代码:

Configuration config = new Configuration(getResources().getConfiguration());

//修改Configuration,让输入法认为系统中没有外接键盘

config.keyboard = Configuration.KEYBOARD_NOKEYS;

getResources().updateConfiguration(config, getResources().getDisplayMetrics());

然后重新编译整个系统。

果然不出所料,问题引刃而解。

最后写点感悟:

1.解决这个问题,还是要感谢这篇文章的博主,我是看了这篇文章后才把整个过程搞懂的。网址:http://www.it165.net/pro/html/201406/15445.html。

2.一个人解决问题真的很痛苦,没人交流沟通,成功与失败都得自己扛着。能有个人交流技术,交流经验当然再好不过了,没人交流也不要怕,要坚信方法把问题要多。遇到问题不要想着失败,要坚信一定能成功,顺藤摸瓜,总会有解决办法。

3.问题解决了,自己也进步了,记录下来,为了自己,也为了那些志同道合并且一如自己在这条道上拼搏的朋友们。

关于Android外设键盘导致系统输入法隐藏的解决方案相关推荐

  1. Android 检测键盘是否显示及隐藏键盘

    Android 检测键盘是否显示及隐藏键盘的方法~~ package com.newland.util;import android.app.Activity; import android.view ...

  2. Android软键盘手动显示、隐藏、布局上移和EditText上移

    主要实现:Android软键盘手动显示.隐藏.布局上移和EditText上移 AndroidManifest.xml <?xml version="1.0" encoding ...

  3. android 软键盘监听、隐藏、显示、点击空白处隐藏和Android KEYCODE 键值大全

    android 软键盘监听.隐藏.显示.点击空白处隐藏. textView.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boo ...

  4. android自定义键盘遮挡,Android软键盘遮挡的四种完美解决方案

    一.问题概述 在编辑框输入内容时会弹出软键盘,而手机屏幕区域有限往往会遮住输入界面,我们先看一下问题效果图: 输入用户名和密码时,系统会弹出键盘,造成系统键盘会挡住文本框的问题,如图所示: 输入密码时 ...

  5. android 软键盘的显示和隐藏方法

    方法一:在OnCreate()函数中,加上下面的代码 getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE ...

  6. android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究

    在android中,常常会和输入法的软件键盘交互.在Manifest文件中,系统给activity的一个属性-windowSoftInputMode来控制输入法的显示方式. 该属性提供了Activit ...

  7. Android 软键盘的显示和隐藏,这样操作就对了

    一.前言 如果有需要用到输入的地方,通常会有需要自动弹出或者收起软键盘的需求.开篇明义,本文会讲讲弹出和收起软键盘的一些细节,最终还会从源码进行分析. 想要操作软键盘,需要使用到 InputMetho ...

  8. Android软键盘的显示与隐藏

    本文仅是对原创文章重新进行或多或少的代码测试,权当记录并加深印象 再次感谢开发者社区的分享 一:简述 点击文本框EditText,系统会自动弹出软键盘(其本质是一个Dialog),这必然会引起当前Ac ...

  9. android 虚拟键盘的显示与隐藏问题

    焦点改变时如何隐藏虚拟键盘 在开发过程中碰到了一个需求:在点击搜索框后,再点击别的地方,让虚拟键盘隐藏 在焦点改变时,隐藏虚拟键盘.在 listView 中添加焦点监听.其中 mEditText 为所 ...

最新文章

  1. (已解决)AttributeError: ‘PrecisionRecallDisplay‘ has no attribute ‘from_predictions‘以及查看sklearn版本
  2. Django 流式响应中文csv样例
  3. windows上报错:Could not find a version that satisfies the requirement torch==0.4.1
  4. 用ftp、http搭建网络yum源
  5. F(n)完全覆盖中的计数问题
  6. python2.7+pyqt4实现记事本基本功能
  7. 效率提升工具Listary
  8. EditView设置边框
  9. mysql数据库存储过程及调用方法
  10. Sublime Text 2 中运行 PHP
  11. grep -A :显示匹配行和之后的几行
  12. list.php tid 1,DedeCMS栏目用目录名个性化伪静态
  13. 动图处理_100+动图带你看懂百大加工工艺(成型、表面处理、链接、切割)
  14. drupal7 payment module:把支付form元素注入到form中
  15. centos7 中彻底卸载mysql
  16. mysql无法修改表字段
  17. 计算机一级考试试题在线操作,计算机一级考试题库操作题
  18. 手术麻醉管理系统方案/案列/小程序/网站
  19. UE4UI制作_MainMenu
  20. 读书笔记5.2——《让数字说话:审计,就这么简单》:孙含晖

热门文章

  1. T-Flash卡热插拔案例分析
  2. 千万不要和男生说:世界上没有奥特曼,否则你会见识到真正的奥特曼。
  3. iMX6 yocto平台QT交叉编译环境搭建
  4. 时光机APP隐私协议
  5. python 判断是不是汉字危机阅读答案_《汉字的危机》阅读答案
  6. NX二次开发(C#)-建模-参数化模型自动修改
  7. 【模型部署】Jetson Xavier NX(eMMC)部署YOLOv5-5.0
  8. 点击缓慢滑动返回顶部
  9. MEGAN2.1 User guide
  10. 113资讯网:最近在玩一个4414站长论坛,可以发帖赚钱的站长论坛!