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

相关推荐
alexhilton9 小时前
Android的Agent优先时代:构建时vs运行时
android·kotlin·android jetpack
Cutecat_10 小时前
视频字幕处理工具横向:提取模式 vs 编辑模式,该如何选择
android·前端·ios·语音识别
2601_9617652911 小时前
【分享】PlayerPro媒体音乐播放器 完整专业版
android·媒体
JohnnyDeng9413 小时前
【Android】Android 包体积优化:R8/ProGuard 深度配置全攻略
android·性能优化·kotlin·jetpack
故渊at13 小时前
第九板块:Android 多媒体体系 | 第二十四篇:Camera Service 与 HAL3 成像流水线
android·camera·多媒体体系·hal3
智者知已应修善业14 小时前
【51单片机8位数码管同时倒计时从9999】2024-1-25
c++·经验分享·笔记·算法·51单片机
CoreTK芯通康EMC整改15 小时前
PCB 信号回流路径 EMC 失效深度解析:原理、误区与量产级整改方案
网络·经验分享·安全·emc整改案例·emc整改
Jinkxs17 小时前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python
私人珍藏库17 小时前
【Android】VLLO-韩国热门手机剪辑APP
android·app·工具·软件·多功能
Cloud_Shy61818 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法