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

相关推荐
铉铉这波能秀3 小时前
如何在Android Studio中使用Gemini进行AI Coding
android·java·人工智能·ai·kotlin·app·android studio
川石课堂软件测试5 小时前
什么是BUG,你对BUG的了解有多少?
android·linux·服务器·python·功能测试·bug·安全性测试
聪明的笨猪猪5 小时前
Java Spring “事务” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2025-10-11
人工智能·经验分享·搜索引擎·产品运营
玩机达人887 小时前
三星S25Ultra/S24安卓16系统Oneui8成功获取完美root权限+LSP框架
android·linux·里氏替换原则
居安思危_Ho8 小时前
RK平台Uniapp自启动缓存问题解决
android·缓存·uni-app·rk平台·uniapp资源文件
molong9318 小时前
Activity/Service/Broadcast/ContentProvider 生命周期交互
android·学习·交互
我要学习别拦我~8 小时前
数据比例与尺度:如何避免让图“放大”差异
经验分享·信息可视化·数据可视化
爱学习的小鱼gogo10 小时前
python 矩阵中寻找就接近的目标值 (矩阵-中等)含源码(八)
开发语言·经验分享·python·算法·职场和发展·矩阵
Metaphor69211 小时前
Java 创建 Word 文档:实现高效文档生成
经验分享