Aayushi
Aayushi

Reputation: 1816

onServiceConnected is not getting called after enabling accessibility

I have two app - MyApplication and FirstApp. There's is a button in MyApplicaton on click of which I am navigated to FirstApp.

Now, I want to read the contents of FirstApp using AccessibilityService.

My code goes like this for MyApplication- MainActivity.java

package com.example.abc.myapplication;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button mButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent(this,MyAccessibilityService.class);
        startService(intent);
        mButton = (Button) findViewById(R.id.click_me);
        mButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
      Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.example.abc.firstapp");
      startActivity(launchIntent);
    }
}

MyAccessibilityService.java

package com.example.aayushi.myapplication;

public class MyAccessibilityService extends AccessibilityService {
    private AccessibilityServiceInfo info;

    @Override
    protected void onServiceConnected() {
        Log.i("service connected","service");
        info = new AccessibilityServiceInfo();
        info.eventTypes=AccessibilityEvent.TYPES_ALL_MASK;
        info.notificationTimeout=100;
        info.feedbackType=AccessibilityEvent.TYPES_ALL_MASK;
        info.packageNames = new String[]{"com.example.abc.firstapp"};
        setServiceInfo(info);
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
       Log.i("onEvent----","yay");
       Log.i("event-----------", event.toString());
        //Log.i("source", event.ge)
    }

    @Override
    public void onInterrupt() {

    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.abc.myapplication">
    <uses-feature android:name="android.hardware.fingerprint"/>
    <uses-permission android:name="android.permission.USE_FINGERPRINT"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <service android:name=".MyAccessibilityService"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
            >
            <meta-data android:name="android.accessibilityservice"
                android:resource="@xml/accessibility_config"/>
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>
        </service>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

accessibility_config.xml

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/accessibility_service_description"
    android:packageNames="com.example.abc.myapplication"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFlags="flagDefault"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:notificationTimeout="100"
    android:canRetrieveWindowContent="true"
    android:settingsActivity="com.example.abc.myapplication.MyAccessibilityService" />

The problem is after enabling accessibility on device, onServiceConnected() is not at all getting called. For testing, I am using Android 8.0.0 , API 26.

Upvotes: 1

Views: 1090

Answers (1)

MobA11y
MobA11y

Reputation: 18860

It looks like you're trying to start your accessibility service from within your activity. You can't do this. You must start your accessibility service from the accessibility services menu. Settings > General > Accessibility. You also most get rid of the code that attempts to start your service from within your activity.

Upvotes: 2

Related Questions