Android 奥利奥辅助功能服务在一两天后停止工作
Android Accessibility Service stopped working after a day or two on Oreo
背景:
我有一个从 AccessibilityService
延伸而来的 class。每当更改 window 时,都会调用以下函数,这会给我前台应用程序的应用程序名称。
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
以下是我设置的配置:
@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);
}
AccessibilityService.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" />
问题:
它在一段时间内工作正常,但一两天后它突然停止工作。它不调用 onAccessibilityEvent(AccessibilityEvent event)
函数。虽然此应用程序的辅助功能服务已启用,但在更改 window 时仍然不会显示应用程序名称。
可能是应用程序从睡眠模式返回时不起作用?我不得不在我的调试版本之上重新安装该应用程序,然后它再次开始工作,但持续了多长时间。
问题: 我怎样才能确保它 总是 return 当 window 是改变了吗?
只需重新启动您的应用程序。这是因为 Accessibility Service 由 Android OS 管理,所以如果任何事情导致您的服务崩溃,它将被杀死并重新安排在您无法控制的未来某个时间启动.所以有可能是你的服务被kill掉了
背景:
我有一个从 AccessibilityService
延伸而来的 class。每当更改 window 时,都会调用以下函数,这会给我前台应用程序的应用程序名称。
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
以下是我设置的配置:
@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);
}
AccessibilityService.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" />
问题:
它在一段时间内工作正常,但一两天后它突然停止工作。它不调用 onAccessibilityEvent(AccessibilityEvent event)
函数。虽然此应用程序的辅助功能服务已启用,但在更改 window 时仍然不会显示应用程序名称。
可能是应用程序从睡眠模式返回时不起作用?我不得不在我的调试版本之上重新安装该应用程序,然后它再次开始工作,但持续了多长时间。
问题: 我怎样才能确保它 总是 return 当 window 是改变了吗?
只需重新启动您的应用程序。这是因为 Accessibility Service 由 Android OS 管理,所以如果任何事情导致您的服务崩溃,它将被杀死并重新安排在您无法控制的未来某个时间启动.所以有可能是你的服务被kill掉了