Vishal Afre
Vishal Afre

Reputation: 1043

Accessibility Event occurs only once after enabling the Accessibility Service

I've just started coding my app which uses Accessibility Service. I'll explain my problem in detail.

Below is my onServiceConnected method of MyAccessibilityService class

protected void onServiceConnected() {
    super.onServiceConnected();
    AccessibilityServiceInfo info = getServiceInfo();
    info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED | AccessibilityEvent.WINDOWS_CHANGE_ADDED;

    info.packageNames = new String[]
            {THIRD_PARTY_APP_PACKAGE};

    info.notificationTimeout = 100;
    this.setServiceInfo(info);
}

The app is detecting events in onAccessibilityEvent() method

public void onAccessibilityEvent(AccessibilityEvent event) {
    AccessibilityNodeInfo source = event.getSource();
    if (source == null) {
        return;
    }

    Toast.makeText(this, "Event Occured", Toast.LENGTH_SHORT).show();
}

Now when I open the third party app, I'm getting the Toast "Event occured". Now I close the app and when I open it again, the method is not called and I don't get any Toast. To make it working again, I have to disable the accessibility service of my app in my phone's Settings and again enable it.

I know I'm missing something and my only question is what should be the additional part of code or what modifications I need in order to detect the event every time I open the third party app?

Upvotes: 0

Views: 554

Answers (1)

Phil Weaver
Phil Weaver

Reputation: 758

Have you tried getting rid of the notification timeout? You probably don't need it, and it isn't the best-tested API.

Upvotes: 0

Related Questions