Использование службы доступности Android
Я использовал службу Accessibility в Android, чтобы обнаружить приложение переднего плана.
Я хочу прослушать 2 из доступных событий доступности
TYPE_VIEW_TEXT_CHANGED
TYPE_WINDOW_STATE_CHANGED
Я хочу слушать всех window state change
события, которые работают, но для второго события, я хочу слушать view_text_changed
событие только 1-2 заявки и не все.
Я прочитал и попробовал android:packageNames
параметр в xml, но тогда это наложит ограничение на событие window_state_changed.
Есть ли другой способ сделать это??
2 ответа
К сожалению, нет способа указать интересные имена пакетов для указанных событий специальных возможностей. Вы должны просто использовать 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");
}
}
Надеюсь, поможет!