rk3128 7.1修复插入键盘后软键盘仍然弹出的bug

有客户反馈说,3128插入物理键盘后,输入时软键盘仍然弹出来。

测试测了一下果然是这样,一开始还以为前任码农改出来的问题,试了一下最新sdk,仍然如此

卧槽。。。然后上网搜,从来都是要求搞强制弹出的,这下子麻爪,按照

Android P控制虚拟键盘的显示和隐藏_android开发 虚拟键盘开关_Eastsea.Chen的博客-CSDN博客

的改法,辛苦摸索出来隐藏的代码是

lzy@ztlsz-PowerEdge-T640:/media/lzywork/rk3128_nougat_mid$ git diff frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
diff --git a/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java b/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
index 2e9cbf2..a25c383 100644
--- a/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/frameworks/base/core/java/android/view/inputmethod/InputMethodManager.java
@@ -67,6 +67,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import android.provider.Settings;
 
 import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
 
@@ -914,7 +915,10 @@ public final class InputMethodManager {
      * @param flags Provides additional operating flags.  Currently may be
      * 0 or have the {@link #SHOW_IMPLICIT} bit set.
      */
-    public boolean showSoftInput(View view, int flags) {
+    public boolean showSoftInput(View view, int flags) {//luke fix 实体键盘时仍然显示虚拟键盘的bug。现在按设置-输入-实体键盘的值来
+        //int ret = Settings.Secure.getInt(view.getContext().getContentResolver(), Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD, 0);
+        //if( ret == 0) return false;
+        //else return showSoftInput(view, flags, null);
         return showSoftInput(view, flags, null);
     }
     

好了 ,这下子永久隐藏,不插软键盘也隐藏。我都想给这客户直接这么出算了。后来一想,算了还是正经修bug吧。于是加调试信息看现象,最后,补丁如下

lzy@ztlsz-PowerEdge-T640:/media/lzywork/rk3128_nougat_mid$ git diff  frameworks/base/core/java/android/inputmethodservice/InputMethodService.java
diff --git a/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java b/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java
index 9a6f804..898c55d 100644
--- a/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java
+++ b/frameworks/base/core/java/android/inputmethodservice/InputMethodService.java
@@ -1271,7 +1271,12 @@ public class InputMethodService extends AbstractInputMethodService {
         if (mSettingsObserver.shouldShowImeWithHardKeyboard()) {
             return true;
         }
+
+        //luke fix 插入键盘且设置-输入法-实体键盘显示虚拟键未打开时,虚拟键仍显示的问题
         Configuration config = getResources().getConfiguration();
+        if(  config.keyboard == Configuration.KEYBOARD_QWERTY &&config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES )
+            return false;
+
         return config.keyboard == Configuration.KEYBOARD_NOKEYS
                 || config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES;
     }

经本人亲自测试:设置-输入法-物理键盘-显示XXX虚拟键盘的开关现在有用了。

该开关实际修改的值是:

adb shell settings put secure show_ime_with_hard_keyboard 1

adb shell settings get secure show_ime_with_hard_keyboard

代码写法是:

Settings.Secure.putInt(this.getContentResolver(),Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD, 0);
Settings.Secure.getInt(this.getContentResolver(),Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD, 0);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值