Android привязать к AccessibilityService - PullRequest
3 голосов
/ 13 марта 2012

Я создал службу Android, которая является AccessibilityService. Из моей деятельности я хотел бы связать с этой службой. Нет межпроцессного взаимодействия, поэтому я попытался создать локальную Binder реализацию, которая просто возвращает сервис (как в этом примере http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html).

Проблема в том, что onBind в AccessibilityService равно final, и я не могу переопределить его, чтобы вернуть локальное связующее.

Значит ли это, что мне нужно использовать AIDL, если я хочу привязать к сервису?

Ответы [ 2 ]

3 голосов
/ 28 октября 2016

Невозможно выполнить привязку к AccessibilityService, потому что это onBind() метод, объявленный как final.НО, вы можете использовать его экземпляр, сохранив его в статическом поле.

В вашем MyAccessbilityService классе:

1.Создайте статическое поле типа вашего AccessibilityService

private static MyAccessibilityService myAccessibilityServiceInstance;

2. Инициализировать его в методе onServiceConnected ()

@Override
protected void onServiceConnected() {
    super.onServiceConnected();
    myAccessibilityServiceInstance = this;
}

3. Очистить, когда AccessibilityService отключен в методе onUnbind ():

@Override
public boolean onUnbind(Intent intent) {
    myAccessibilityServiceInstance = null;
    return super.onUnbind(intent);
}

4. Создайте геттер для своего экземпляра и давайте добавим аннотацию @Nullable, поскольку мы не знаем, в какой период жизненного цикла сервиса он будет называться

@Nullable
public static MyAccessibilityService getInstance(){
    return myAccessibilityServiceInstance;
}

и, наконец, в вашей деятельности или там, где вам это нужно.:

    MyAccessibilityService accessibilityService = MyAccessibilityService .getInstance();
    if(accessibilityService != null){
        //do smth here:
    }

Реализовано в моем приложении, до сих пор отлично работает.Спасибо alanv в своем ответе https://stackoverflow.com/a/12557673/5502121

2 голосов
/ 13 марта 2012

Нет, это означает, что вы не можете привязать к услуге, точка.Вам необходимо переопределить onBind() для AIDL.

...