Search code examples
androidaccessibility

AccessibilityService performGlobalAction does not work


I want to use AccessibilityService to perform global actions such as back, take_screenshot and more. if the service permission is disabled i get Nullpointerexception and if accessibility service permission is enabled it doesn't do anything at all.

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button b = findViewById(R.id.b);
        ExecutionService service = new ExecutionService();
        b.setOnClickListener(v -> {
            service.performGlobalAction(AccessibilityService.GLOBAL_ACTION_TAKE_SCREENSHOT);
        });
    }
}

My Accessibility Service

public class ExecutionService extends AccessibilityService {

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

    }

    @Override
    public void onInterrupt() {

    }

}

accessibility service config xml

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"
    android:description="@string/accessibility_description"
    android:notificationTimeout="100" />

Manifest declaration

<service
            android:name=".ExecutionService"
            android:enabled="true"
            android:exported="true"
            android:label="@string/app_name"
            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/auto_reply_service_config"/>
        </service>

I did not declare the

<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" /> 

permission.


Solution

  • ExecutionService service = new ExecutionService();

    Doesn't work for accessibility.

    The service starts or stops after you enable or disable it manually in the smart settings.

    Use broadcasts.