Skip to content

Instantly share code, notes, and snippets.

Created February 25, 2012 17:23
What would you like to do?
a minimalist example of Android accessibility service
$ adb logcat -s RecorderService
--------- beginning of /dev/log/system
--------- beginning of /dev/log/main
V/RecorderService( 1841): onServiceConnected
V/RecorderService( 1841): onAccessibilityEvent: [type] TYPE_VIEW_CLICKED [class] android.widget.Button [package] com.example [time] 7710428 [text] Activity1
V/RecorderService( 1841): onAccessibilityEvent: [type] TYPE_VIEW_FOCUSED [class] android.widget.EditText [package] com.example [time] 7710521 [text]
V/RecorderService( 1841): onAccessibilityEvent: [type] TYPE_WINDOW_STATE_CHANGED [class] com.example.Activity1 [package] com.example [time] 7710536 [text] TestRecord
V/RecorderService( 1841): onAccessibilityEvent: [type] TYPE_VIEW_FOCUSED [class] android.widget.EditText [package] com.example [time] 7710539 [text]
V/RecorderService( 1841): onAccessibilityEvent: [type] TYPE_VIEW_CLICKED [class] android.widget.EditText [package] com.example [time] 7725471 [text]
V/RecorderService( 1841): onAccessibilityEvent: [type] TYPE_VIEW_TEXT_CHANGED [class] android.widget.EditText [package] com.example [time] 7728589 [text] f
V/RecorderService( 1841): onAccessibilityEvent: [type] TYPE_VIEW_TEXT_CHANGED [class] android.widget.EditText [package] com.example [time] 7728804 [text] fg
V/RecorderService( 1841): onAccessibilityEvent: [type] TYPE_VIEW_TEXT_CHANGED [class] android.widget.EditText [package] com.example [time] 7728994 [text] fgj
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
public class RecorderService extends AccessibilityService {
static final String TAG = "RecorderService";
private String getEventType(AccessibilityEvent event) {
switch (event.getEventType()) {
case AccessibilityEvent.TYPE_VIEW_CLICKED:
case AccessibilityEvent.TYPE_VIEW_FOCUSED:
case AccessibilityEvent.TYPE_VIEW_LONG_CLICKED:
case AccessibilityEvent.TYPE_VIEW_SELECTED:
case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
return "default";
private String getEventText(AccessibilityEvent event) {
StringBuilder sb = new StringBuilder();
for (CharSequence s : event.getText()) {
return sb.toString();
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.v(TAG, String.format(
"onAccessibilityEvent: [type] %s [class] %s [package] %s [time] %s [text] %s",
getEventType(event), event.getClassName(), event.getPackageName(),
event.getEventTime(), getEventText(event)));
public void onInterrupt() {
Log.v(TAG, "onInterrupt");
protected void onServiceConnected() {
Log.v(TAG, "onServiceConnected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.flags = AccessibilityServiceInfo.DEFAULT;
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
Copy link

stevehb commented Jul 14, 2015

For API >= 14, it's probably easier to get the event type string by using AccessibilityEvent. eventTypeToString(int).

Copy link

thanks for the example. saved my time!

Copy link

through which event will i get the contact number of clicked contact. can i get the code for it.

Copy link

thank you! this example is help me.

Copy link

srujanb commented Jul 17, 2016

I was searching for something like this. Thank you so much.

Copy link

Can you explan me Plz ?
Is the use of the accessibility services requires that I must have a special version of Android,
I currently have the 4.1.2, but no service works fo me;
When iIverifie my phone , i don't find the specific ICON shown above : Home...Setting......

Copy link

Thank you :))

Copy link

ehsanheidari67 commented Jan 8, 2017

Thank you! Exactly what I wanted

Copy link

Thank you!!! It helped me a lot. I need to paste response on edittext. can you help me on it?

Copy link

What does the value returned by getEventTime() represent?

Copy link

tks you very much:D

Copy link

dedsec1911 commented Aug 18, 2018

I have a server based realtime keylogger, the issue is when I type in passwords it sends null value to the server ! What can I do to fix this ?
The code is written on android and keystrokes are monitored by Accessibility Event handler.

Copy link

In which cases do "onInterrupt" get called? Isn't it the same as "onDestroy" ? I thought that the OS will try to keep it alive as long as possible, no?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment