首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓绑定AccessibilityService

安卓绑定AccessibilityService
EN

Stack Overflow用户
提问于 2012-03-13 20:31:44
回答 2查看 2.9K关注 0票数 4

我已经创建了一个android服务,它是一个AccessibilityService。从我的活动中,我想绑定到该服务。由于没有进程间通信,因此我尝试创建一个只返回服务的本地Binder实现(如本例中的http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html)。

问题是AccessibilityService中的onBindfinal,我不能重写它来返回本地绑定器。

这是否意味着如果我想要绑定到服务,我需要使用AIDL?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-13 21:35:16

不是,这意味着您不能绑定服务,句号。您需要覆盖AIDL的onBind()

票数 2
EN

Stack Overflow用户

发布于 2016-10-28 17:57:00

您不能绑定到AccessibilityService,因为它是声明为final的onBind()方法。但是,您可以通过将其存储在静态字段中来使用它的实例。

在您的MyAccessbilityService类中:

1.创建AccessibilityService类型的静态字段

代码语言:javascript
复制
private static MyAccessibilityService myAccessibilityServiceInstance;

2.在onServiceConnected()方法中初始化它

代码语言:javascript
复制
@Override
protected void onServiceConnected() {
    super.onServiceConnected();
    myAccessibilityServiceInstance = this;
}

3.在onUnbind()方法中关闭AccessibilityService时将其清除:

代码语言:javascript
复制
@Override
public boolean onUnbind(Intent intent) {
    myAccessibilityServiceInstance = null;
    return super.onUnbind(intent);
}

4.为您的实例创建一个getter并添加注释@Nullable,因为我们不知道它将在服务的哪个生命周期中被调用

代码语言:javascript
复制
@Nullable
public static MyAccessibilityService getInstance(){
    return myAccessibilityServiceInstance;
}

最后,在你的活动中或任何你需要的地方:

代码语言:javascript
复制
    MyAccessibilityService accessibilityService = MyAccessibilityService .getInstance();
    if(accessibilityService != null){
        //do smth here:
    }

在我的应用程序中实现,到目前为止工作得很好。感谢alanv在他的回复https://stackoverflow.com/a/12557673/5502121

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9683927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档