首页 > 解决方案 > 在 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:
        }
    }

标签: androidaccessibilityservice

解决方案


我已经解决了这个问题。在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 来解决此问题。


推荐阅读