一、问题背景
近日接到客户的投诉,我方的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设备的通知,会导致该虚拟键盘弹出的配置失效。所以,需要根据实际情况进行应用。
三、参考资料