使用安卓辅助功能服务



我已经使用android中的辅助功能服务来检测前台应用程序。

我想收听2个可用的可访问性事件

TYPE_VIEW_TEXT_CHANGED

TYPE_WINDOW_STATE_CHANGED

我想监听所有window state change事件,这是有效的,但对于第二个事件,我只想监听1-2个应用程序的view_text_changed事件,而不是全部。

我读过&尝试了xml中的android:packageNames参数,但它会对window_state_changed事件施加限制。

还有别的办法吗??

不幸的是,没有办法为指定的可访问性事件指定有趣的包名称。您只需要使用AccessibilityEvent#getPackageName来筛选您感兴趣的包。

假设您已经将AndroidManifest设置为识别AccessibilityService,我将在此处添加其他必需的代码,以防有人想要直接回答。

辅助功能服务配置文件:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android= "http://schemas.android.com/apk/res/android"
    android:description="@string/accessibility_service_description"
    android:accessibilityEventTypes="typeWindowStateChanged|typeViewTextChanged"
    android:accessibilityFlags="flagDefault"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:notificationTimeout="100"
    android:canRetrieveWindowContent="true"
    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"/>

请注意,android:accessibilityEventTypes是根据需要提供的。如果将包限制在xml中,则不会得到问题中正确指出的TYPE_WINDOW_STATE_CHANGED

因此,您还需要对AccessibilityService的实现进行更改。

public class VoiceAccessibilityService extends android.accessibilityservice.AccessibilityService {
    private static String TAG = VoiceAccessibilityService.class.getName();
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED && event.getPackageName().equals("Your package names")) {
            Logger.d(TAG + " SHOW " + event.toString());
        }
    }
    @Override
    public void onInterrupt() {
        Logger.d(TAG + " interrupt");
    }
}

希望它能有所帮助!

最新更新