RK3399 Android13设备插拔无线鼠标键盘设备出现APP或系统界面刷新现象

一、问题背景

近日接到客户的投诉,我方的Android13 RK3399平台的产品在插拔USB mouse以及keyboard设备的时候,浏览器browser的界面会出现refresh现象,经过在下验证,发现在插拔常规的有线鼠标的场景下没有复现到问题,但在插拔无线USB设备(在下采用的是logi的无限键鼠套装)的情况下,则复现了客户所提出的界面刷新的现象,那么,该怎么处理呢?

二、解决方案

插拔USB设备的过程,会产生一个通知,在很多注册输入设备监听的APP在收取的该通知的情况下会刷新Activity的生命周期,从而产生refresh的现象。既然因为通知引起,那么我们去除掉通知如何?方法直接参照博客《Android 屏蔽USB通知,解决插拔usb设备刷新屏幕_android usb 提示-CSDN博客》的做法:

1、添加是否开关通知的属性设置

diff 复制代码
Index: device/rockchip/rk3399/rk3399_t/rk3399_t.mk
===================================================================
--- device/rockchip/rk3399/rk3399_t/rk3399_t.mk (revision 3609)
+++ device/rockchip/rk3399/rk3399_t/rk3399_t.mk (working copy)
@@ -47,4 +47,5 @@
     ro.product.ota.host = 192.168.1.1:8888 \
     ro.sf.lcd_density=160 \
     persist.sys.statusbar.enable=true \
-    persist.sys.navigationbar.enable=true
+    persist.sys.navigationbar.enable=true \
+    persist.sys.hidnotify.disable=1

2、通过设置的属性来屏蔽通知

diff 复制代码
Index: frameworks/native/services/inputflinger/InputListener.cpp
===================================================================
--- frameworks/native/services/inputflinger/InputListener.cpp   (revision 3609)
+++ frameworks/native/services/inputflinger/InputListener.cpp   (working copy)
@@ -26,6 +26,7 @@
 #include <android/log.h>
 #include <math.h>
 #include <utils/Trace.h>
+#include <cutils/properties.h>
 
 using android::base::StringPrintf;
 
@@ -350,7 +351,14 @@
 void QueuedInputListener::notifyConfigurationChanged(
         const NotifyConfigurationChangedArgs* args) {
     traceEvent(__func__, args->id);
-    mArgsQueue.emplace_back(std::make_unique<NotifyConfigurationChangedArgs>(*args));
+    // mArgsQueue.emplace_back(std::make_unique<NotifyConfigurationChangedArgs>(*args));
+
+    char prop_value[PROPERTY_VALUE_MAX];
+    property_get("persist.sys.hidnotify.disable", prop_value, "1");
+    if (strcmp(prop_value, "1") != 0)
+    {
+       mArgsQueue.emplace_back(std::make_unique<NotifyConfigurationChangedArgs>(*args));
+    }
 }
 
 void QueuedInputListener::notifyKey(const NotifyKeyArgs* args) {

编译后烧录,可以屏蔽掉键盘插入时的通知,从而间接解决掉refresh的问题。

值得注意的一点是,该方案可能会影响到一些原有的配置。比如在下的项目中做了键盘插入时通知虚拟键盘也要同步弹出界面的配置,如果屏蔽掉插拔USB设备的通知,会导致该虚拟键盘弹出的配置失效。所以,需要根据实际情况进行应用。

三、参考资料

Android 屏蔽USB通知,解决插拔usb设备刷新屏幕_android usb 提示-CSDN博客https://blog.csdn.net/u010664697/article/details/130987054?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522287fb8ab4dc298d6c96fa534577388d9%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=287fb8ab4dc298d6c96fa534577388d9&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-130987054-null-null.nonecase&utm_term=Android13%E6%8F%92%E6%8B%94%E9%BC%A0%E6%A0%87%E4%BC%9A%E5%88%B7%E6%96%B0%E9%A1%B5%E9%9D%A2&spm=1018.2226.3001.4450

相关推荐
汇策研习社6 小时前
斐波那契均线交易体系:21/55/89三重均线趋势战法详解
大数据·经验分享·金融·区块链·fastbull
hunterandroid6 小时前
[Android 从零到一] LiveData 粘性事件与单次消费:从重复触发到可靠事件总线
android
hunterandroid7 小时前
[Android 从零到一] Android 事件分发机制:从 ACTION_DOWN 到 View 事件消费链路
android
阿巴斯甜7 小时前
adb‑shell 全套命令实操总结
android
奔跑的架构师8 小时前
[A-49]ARMv9/v8-PSCI接口规范与工作流程简介
android·linux·arm开发·arm
Marco_Marco1358 小时前
开源地图API vs 商业地图API:选型全对比
经验分享·开源
LuminousCPP8 小时前
单链表专题(三)-刷题复盘篇:从快慢指针到环形链表 II 数学推导
数据结构·经验分享·笔记·学习·算法·链表
AFinalStone8 小时前
Android 7系统国际化(七)Resources 与 AssetManager 源码剖析
android·国际化·local
Android-Flutter9 小时前
Android 内存泄漏详解
android·kotlin
catchadmin9 小时前
Fiber 与 PHP 8.6 Polling API 异步初探
android·开发语言·php