android - 在 Android 9.0 中无法接收 TYPE_NOTIFICATION_STATE_CHANGED 事件
问题描述
在 Android 9.0 设备中,我的无障碍服务已经连接,但无法接收TYPE_NOTIFICATION_STATE_CHANGED
事件,其他事件如TYPE_WINDOW_CONTENT_CHANGED
可以接收。
否则,它可以在 Android 8.0 设备中接收。
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:packageNames="com.tencent.mm"
android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" />
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.i(TAG, "received event: " + event);
int eventType = event.getEventType();
switch (eventType) {
case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
handleNotification(event);
break;
default:
}
}
解决方案
我已经解决了这个问题。在Android 9.0中,android系统对TYPE_NOTIFICATION_STATE_CHANGED
事件进行了一些修改(具体变化未知),所以无法接收到该事件。解决方法是在辅助功能配置 xml 中删除android:packageNames="com.tencent.mm"
,并在辅助功能服务中过滤包。这样TYPE_NOTIFICATION_STATE_CHANGED
就可以在Android 9.0中接收了。在 Android 9.0 中,还有另一种方法可以通过使用 NotificationListenerService 而不是 AccessibilityService 来解决此问题。
推荐阅读
- c++ - 与 C++ 中的循环和变异向量混淆
- javascript - 浏览器中 Javascript 源代码中的“w()”、“n()”
- python - Pandas 基于模式长度的阈值数据序列
- r - 嵌套 rollmean - 如何避免来自每个 DF 边缘的 NA
- java - Java调用同一父类的子构造函数
- scons - 是什么让我的 SCons 构建需要这么长时间?
- spring-boot - 使用外部 jar 中的 ControllerAdvice
- android - “符号表全局部分中的本地符号'__bss_start'”仅在Android NDK aarch64构建中
- javascript - 如何使用 JavaScript 在用户名和密码输入元素上添加“输入”事件侦听器?
- spring-cloud-dataflow - 组合任务属性