docServiceInfo 에 대한 인용 "이 메소드는 언제든지 호출 할 수 있지만 시스템이이 서비스에 바인드 된 후 정보가 수집되고이 메소드가 그 후 전화했다. "AccessibilityService setServiceInfo 메소드의 변경 사항이 onServiceConnected 외부에서 적용되지 않는 것 같습니다.
내 앱에서 내게 필요한 옵션이 사용 설정되었으며 onServiceConnected 메서드 내에서 serviceInfo를 설정했으며 해당 앱에 대한 이벤트를 수신하고 있습니다.
이제는 onServiceConnected 메서드 외부에서 setServiceInfo를 호출하여 패키지 목록을 수정하려고하는데 변경 사항이 적용되지 않습니다. 즉, 이전에 지정된 패키지 목록의 패키지에서 이벤트를 받고 있습니다. 수정 된 패키지 목록에는 없습니다).
@Override
protected void onServiceConnected() {
AccessibilityServiceInfo accessibilityServiceInfo = new AccessibilityServiceInfo();
accessibilityServiceInfo.packageNames = new String[]{"packageA","packageB"};
accessibilityServiceInfo.eventTypes = AccessibilityEvent.TYPE_VIEW_CLICKED | AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED
| AccessibilityEvent.TYPE_VIEW_SCROLLED | AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED
| AccessibilityEvent.TYPE_VIEW_FOCUSED | AccessibilityEvent.TYPE_VIEW_SELECTED
| AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
accessibilityServiceInfo.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
accessibilityServiceInfo.notificationTimeout = 100;
accessibilityServiceInfo.flags = (AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS | accessibilityServiceInfo.flags);
setServiceInfo(accessibilityServiceInfo);
}
@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {
AccessibilityServiceInfo serviceInfo = getServiceInfo();
serviceInfo.packageNames = new String[]{"packageA"};
setServiceInfo(serviceInfo);
}
accessibility_service_config.xml
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_service_description"
/>
그래서, 문제는 내가 나중에받는 접근성 이벤트에 따라 접근성 서비스 내에서 패키지를 추가/제거합니까 어떻게?
아마도 "제외"라고했을 때 분명하지 않았습니다. 설명해 드리겠습니다. 기본적으로 onServiceConnected의 setServiceInfo를 사용하여 설정 한 두 패키지 "packageA"및 "packageB"에 대한 이벤트를 수신하려고합니다. 나중에 특정 이벤트를 수신 한 후에 packageB를 "제외"하고 packageA에서 이벤트 만 원합니다.이제 패키지 A를 포함하고 setServiceInfo를 다시 호출하도록 packageNames 배열을 수정하지만 packageB.I의 이벤트를 여전히받습니다. 현재 제안 된 방법을 사용하고 있지만 packageB에서 이벤트 수신을 귀찮게하고 왜 PackageB를 구독 취소 할 수 있는지 반환합니다. . –
모호성을 피하기 위해 질문을 편집했습니다. –
코드에서 하나의 "if"문을 제거하는 데이 모든 문제가 발생합니까? 따라서, 제시 한 코드에는 아무런 문제가 없습니다. 모두 가설 적으로 작동해야하므로, 코드 또는 Android의 다른 곳에 버그가 있습니다. 처음에는 서비스 정보 초기화에 대해 논평하고 손을 흔들어 보면서 코드를 보려합니다. 즉, 이것은 분명히이 API의 비표준적인 사용이므로 안드로이드에서 버그를 발견했을 수도 있다는 사실을 할인하지 마십시오. – ChrisCM