[高通SDM450][Android9.0]外接键盘闪屏以及默认使用虚拟键盘

文章目录

    • 开发平台基本信息
    • 问题描述
    • 解决方法
      • 拔插外接键盘闪屏
      • 默认使用虚拟键盘

开发平台基本信息

芯片: SDM450
版本: Android 9.0
kernel: msm-4.9

问题描述

公司有一款设备,作为收银机,有两个对外开放的U口,客户将扫码枪跟键盘外接到设备上,发现在插入以及拔出键盘的时候,设备会有一秒钟的黑屏闪烁。

解决方法

拔插外接键盘闪屏

遇到这种闪屏的问题,首先要先确定是哪里出了问题;

  1. 如果换个屏幕就正常,那基本可以确定是硬件问题;

  2. 如果换屏不行,那就投屏或者adb指令录屏,看看视频闪不闪黑屏,如果录下来的视频正常,那有可能是显示驱动有问题;

  3. 如果录屏不正常,大概率就是系统问题;

很不幸,录屏也会闪烁,所以,又是系统工程师的责任。

接着排查问题,我将代码烧到另外的机器上,发现并不存在这个问题,然后,认真对比了两款机器,发现最大的差别就是,出现问题的机器是双屏,在拔插外设的时候,界面会刷新,单屏的设备只刷新一次,而双屏的会刷新两次,所以,在界面重建的时候,加入拔插键盘的判断,不让Activity重建,问题解决,撒花。


frameworks/base/services/core/java/com/android/server/am/ActivityRecord.java

import static android.content.pm.ActivityInfo.CONFIG_UI_MODE;
+ import static android.content.pm.ActivityInfo.CONFIG_KEYBOARD;
+ import static android.content.pm.ActivityInfo.CONFIG_KEYBOARD_HIDDEN;
+ import static android.content.pm.ActivityInfo.CONFIG_NAVIGATION;

    private int getConfigurationChanges(Configuration lastReportedConfig) {
        if ((changes & CONFIG_SMALLEST_SCREEN_SIZE) != 0) {
            final int oldSmallest = lastReportedConfig.smallestScreenWidthDp;
            final int newSmallest = currentConfig.smallestScreenWidthDp;
            if (!crossesSmallestSizeThreshold(oldSmallest, newSmallest)) {
                changes &= ~CONFIG_SMALLEST_SCREEN_SIZE;
            }
        }
+        if ((changes & CONFIG_KEYBOARD) != 0) {
+                changes &= ~CONFIG_KEYBOARD;
+         }
+        if ((changes & CONFIG_KEYBOARD_HIDDEN) != 0) {
+                changes &= ~CONFIG_KEYBOARD_HIDDEN;
+        }
+        if ((changes & CONFIG_NAVIGATION) != 0) {
+                changes &= ~CONFIG_NAVIGATION;
+        }
        // We don't want window configuration to cause relaunches.
        if ((changes & CONFIG_WINDOW_CONFIGURATION) != 0) {
            changes &= ~CONFIG_WINDOW_CONFIGURATION;
        }

        return changes;
    }

默认使用虚拟键盘

diff --git a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
index cb541b3..c6bbc89 100755
--- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -129,7 +129,7 @@
     <integer name="def_multi_press_timeout_millis">300</integer>
 
     <!-- Default for Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD -->
-    <bool name="def_show_ime_with_hard_keyboard">false</bool>
+    <bool name="def_show_ime_with_hard_keyboard">true</bool>
 
     <!-- Default for Settings.System.POINTER_SPEED -->
     <integer name="def_pointer_speed">0</integer>


你可能感兴趣的:(Android9.0,framework,Android9.0,外接扫码枪,外接键盘,闪屏)