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

相关推荐
tmacfrank1 小时前
Android 网络全栈攻略(五)—— 从 OkHttp 拦截器来看 HTTP 协议二
android·网络·okhttp
汇能感知3 小时前
光谱相机在地质勘测中的应用
经验分享·笔记·科技
不惜年少枉少年3 小时前
java Sm2SignWithSM3转php
android·java·php
元亓亓亓3 小时前
MySQL--day6--单行函数
android·数据库·mysql
个案命题3 小时前
鸿蒙Ability对比Android的Fragment
android·华为·harmonyos·鸿蒙·fragment
易境通物流科技4 小时前
易境通专线散拼系统:全方位支持多种专线物流业务!
经验分享
Dovis(誓平步青云)4 小时前
探索C++对象模型:This指针与(构造、析构)成员函数的深度解析(中篇)
开发语言·c++·经验分享·笔记·学习方法
孞㐑¥5 小时前
Linux之Ext系列文件系统(含动静态库)
linux·开发语言·c++·经验分享·笔记
跨境卫士萌萌6 小时前
取消100+零售商加价!塔吉特Circle 360会员体系重构逻辑
人工智能·经验分享·重构