두 가지. 먼저 접근성 서비스 정보를 설정할 때 다음과 같이하는 것이 좋습니다.
AccessibilityServiceInfo info = getServiceInfo();
//Set things in here
setServiceInfo(info);
이제이 문제가 해결되지 않습니다. 그러나 좋은 습관입니다. 서비스 설정 XML의 모든 설정을 숨기고 싶지는 않습니다. 또한 Android 시스템에서 정보 객체를 초기화하지 않으면 올바른 초기화 옵션과 물건이 있습니다. 현재의 것을 잡아서 원하는대로 조정하고 재설정하십시오. 사실, service_config xml 파일에서 편집 할 수있는 변경 사항은 없습니다. 서비스 XML 설정을 사용하면 더 나은 전체 연습이됩니다!
이제 구성에 문제가있는 것입니다. 참고 eventTypes
은 비트 마스크입니다.
asi.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
당신은 WINDOW_STATE_CHANGED
이벤트를 수신 만 말하고있다 : 즉, 다음 줄에 있음을 의미한다. 이것은 어리 석다. 내가 원하는 이벤트에 대해 어떤 알림이 트리거되는지 정확히 알 때까지 내가하고 싶은 것은 TYPE_ALL_MASK로 설정됩니다. 그런 다음 나중에 필터링하십시오. 또한 switch 문을 사용하여 TYPE_ALL_MASK 및 필터를 사용할 수 있으며, 다양한 이벤트를 듣고있는 경우 궁극적으로 필요합니다. 다른 이벤트가 다른 정보를 채 웁니다 (EX : 모든 이벤트에 소스 노드 정보가 없음). 사용중인 이벤트의 유형이 작동하지 않는 이유를 이제
:
TYPE_NOTIFICATION_STATE_CHANGED : 새 알림이 추가 될 때이 이벤트가 발생, 당신은 알림 창을 아래로 스크롤하지 때.
TYPE_WINDOW_STATE_CHANGED : 전체 화면을 차지하고 백그라운드 콘텐트에 대한 액세스를 허용하기 전에 상호 작용이 필요한보기가 튀어 나올 때 발생합니다. 모달 대화 상자, 메뉴 등이 있습니다.이 정의는 실제로 스케치 적이지만 일관성이 없습니다. 나는 백엔드에서 궁극적으로 이것이 "SYSTEM_ALERT_VIEW"권한을 필요로하는 뷰의 드로잉이며, 내가 준 정의가 아니라는 것을 믿는다. 하지만, 그 정의는 의도입니다 ... 안드로이드 접근성 문서 종류는 짜증나.
이제 문제를 알게되었습니다. 나는 A : 서비스 정보를 구성하기 위해 코드를 사용하지 않고 B : TYPE_ALL_MASK로 모든 이벤트를 감시하고 어떤 이벤트가 가장 일관되게 발생하는지 알아 낸다. 모든 이벤트를 볼 경우 알림 표시 줄을 아래로 스크롤하면 많은 액세스 가능성 이벤트가 발생합니다. 가장 신뢰할 수있는 것을 고르십시오/당신을 위해 oppurtune 순간에 발생합니다 (예 : 모든 컨텐츠가 렌더링되기 전에 일부는 실행될 수 있습니다 ...). 그런 다음이를 필터링하십시오.
여기부터 시작하겠습니다.
의 AndroidManifest.xml 서비스 구성 :
<service
android:name=".A11yService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/service_config" />
</service>
service_config XML 파일 :
<?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="typeAllMask"
android:accessibilityFlags="flagIncludeNotImportantViews|flagReportViewIds"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:settingsActivity="com.deque.accessibilityanalyzer.SettingsActivity"
/>
너무 감사합니다! – Walter