Background
I have an app that has an AccessibilityService
. Android seems to keep AccessibilityService
s running all the time, but I only need mine to run sometimes. (Specifically, if a user opens my app and turns it off, the AccessibilityService
is no longer needed.)
If my AccessibilityService
is running when it isn't needed, it's wasting the device's RAM and CPU, and I want to avoid doing this to my users if possible.
Question
How can I programmatically start and stop my AccessibilityService
?
Note that I am not asking to programmatically enable or disable the AccessibilityService
in Android's accessibility settings; this is just about starting and stopping it when it's already enabled.
What I've tried (stopping the AccessibilityService
)
Disabling the
AccessibilityService
component using the following:PackageManager.setComponentEnabledSetting( accessibilityServiceName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0 );
This killed the entire application, including the
AccessibilityService
. Also, after rebooting the phone, theAccessibilityService
was no longer visible in the Android accessibility settings. (It seems that the component needs to be re-enabled followed by restarting the phone in order to get it to show up again.)Disabling the
AccessibilityService
component using the following:PackageManager.setComponentEnabledSetting( accessibilityServiceName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP );
This didn't stop the
AccessibilityService
.Stopping the
AccessibilityService
usingContext.stopService()
andService.stopSelf()
. These didn't stop the service, presumably because the OS is bound to it.Killing the
AccessibilityService
's process usingProcess.killProcess()
. However, the service was soon after restarted and reconnected, presumably because the OS is bound to it.Unregistering for accessibility events using
AccessibilityService.setServiceInfo(new AccessibilityServiceInfo())
. This stops the service from getting accessibility events, but the service still runs in the background.
Related questions
Can accessibility service be stopped or killed?
This one is only about stopping the service. I want to be able to start the service again once it's stopped.