Android 辅助功能服务在 Oreo 上一两天后停止工作

Ahm*_*aiz 5 accessibility accessibility-api accessibilityservice

背景:

我有一个类从 延伸而来AccessibilityService。每当窗口更改时,都会调用以下函数,该函数为我提供前台应用程序的应用程序名称。

@Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

}
Run Code Online (Sandbox Code Playgroud)

以下是我设置的配置:

 @Override
    protected void onServiceConnected() {
        super.onServiceConnected();
        //Configure these here for compatibility with API 13 and below.
        AccessibilityServiceInfo config = new AccessibilityServiceInfo();
        config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
        config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;

        if (Build.VERSION.SDK_INT >= 16) {   //Just in case this helps
            config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
        }
        setServiceInfo(config);
    }
Run Code Online (Sandbox Code Playgroud)

辅助服务.xml

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_explanation"
android:accessibilityEventTypes="typeWindowStateChanged|typeAllMask"
android:accessibilityFeedbackType="feedbackSpoken|feedbackHaptic|feedbackAudible|feedbackVisual|feedbackGeneric|feedbackAllMask"
android:notificationTimeout="100" android:canRetrieveWindowContent="true" />
Run Code Online (Sandbox Code Playgroud)

问题: 它在一段时间内工作正常,但一两天后突然停止工作。它不调用该onAccessibilityEvent(AccessibilityEvent event)函数。虽然该应用程序的辅助功能已启用,但在窗口更改时仍然不显示应用程序名称。

如果应用程序从睡眠模式恢复,它可能无法工作?我必须在调试版本之上重新安装应用程序,然后它再次开始工作,但持续了多长时间。

问题:如何确保在窗口更改时它始终返回应用程序名称?

Jer*_*for 1

只需重新启动您的应用程序即可。这是因为 Accessibility Service 是由 Android 操作系统管理的,因此如果任何原因导致您的服务崩溃,它将被终止并重新安排在您无法控制的未来某个时间启动。所以有可能你的服务已经被杀死了。