0

I'm using accessibility service in my application to read out custom text to the user. This is my service class:

class GlobalAccessibilityService: AccessibilityService() {
    override fun onInterrupt() {
        Log.i("Accessibility","onInterrupt()")
    }

    override fun onAccessibilityEvent(event: AccessibilityEvent?) {
        Log.i("Accessibility","onAccessibilityEvent() & Even is: "+event.toString())
    }
}

And I have declared it in Manifest under Service tag and had corresponding xml file too.

This is how i'm calling the service in my Activity class:




     var mService = GlobalAccessibilityService()

       var manager: AccessibilityManager = mService.getSystemService(Context.ACCESSIBILITY_SERVICE) 

                    if (manager.isEnabled){
                        var event: AccessibilityEvent = AccessibilityEvent.obtain()
                        event.eventType = AccessibilityEvent.TYPE_ANNOUNCEMENT
                        event.text.add("This is a test for Accessibility Service Announcement")
                        manager.sendAccessibilityEvent(event)
                    }

However, I'm getting the following error:


     java.lang.IllegalStateException: System services not available to Activities before onCreate()
            at android.accessibilityservice.AccessibilityService.getSystemService(AccessibilityService.java:1602)

Request help! Thank you.

Narendar
  • 35
  • 2
  • 8

2 Answers2

0

It looks like you are calling the that written below is before onCreate() method. Where are you calling these below codes ? :

var mService = GlobalAccessibilityService()

   var manager: AccessibilityManager = mService.getSystemService(Context.ACCESSIBILITY_SERVICE) 

                if (manager.isEnabled){
                    var event: AccessibilityEvent = AccessibilityEvent.obtain()
                    event.eventType = AccessibilityEvent.TYPE_ANNOUNCEMENT
                    event.text.add("This is a test for Accessibility Service Announcement")
                    manager.sendAccessibilityEvent(event)
                }
Md Aman
  • 340
  • 3
  • 10
0
 var mService = GlobalAccessibilityService()

You just can't instantiate a Service and expect it to work. The Android framework instantiates services for you.

For a normal service, one would use an Intent with a startService() call, but AccessibilityServices are different. See How to start AccessibilityService?

laalto
  • 150,114
  • 66
  • 286
  • 303
  • The service is running and i have declared it in Manifest and configured in XML too.I'm getting my logs from globalAcceessibilityService for events. i.e Log.i("Accessibility","onAccessibilityEvent() & Even is: "+event.toString()) – Narendar Jun 15 '20 at 15:18
  • Yes and the running instance is one you didn't instantiate yourself but the framework did it for you. – laalto Jun 15 '20 at 19:36
  • yes, I understand . How to make announcement (some text) by using accessibility service in Android? I want announce some text on every activity or fragment launch. Thank you. – Narendar Jun 16 '20 at 18:35