使用无障碍服务 Android
Using Accessibility Service Android
我已经在 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");
}
}
希望对您有所帮助!
我已经在 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");
}
}
希望对您有所帮助!