我已经创建了一个android服务,它是一个AccessibilityService。从我的活动中,我想绑定到该服务。由于没有进程间通信,因此我尝试创建一个只返回服务的本地Binder实现(如本例中的http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html)。
问题是AccessibilityService中的onBind是final,我不能重写它来返回本地绑定器。
这是否意味着如果我想要绑定到服务,我需要使用AIDL?
发布于 2012-03-13 21:35:16
不是,这意味着您不能绑定服务,句号。您需要覆盖AIDL的onBind()。
发布于 2016-10-28 17:57:00
您不能绑定到AccessibilityService,因为它是声明为final的onBind()方法。但是,您可以通过将其存储在静态字段中来使用它的实例。
在您的MyAccessbilityService类中:
1.创建AccessibilityService类型的静态字段
private static MyAccessibilityService myAccessibilityServiceInstance;2.在onServiceConnected()方法中初始化它
@Override
protected void onServiceConnected() {
super.onServiceConnected();
myAccessibilityServiceInstance = this;
}3.在onUnbind()方法中关闭AccessibilityService时将其清除:
@Override
public boolean onUnbind(Intent intent) {
myAccessibilityServiceInstance = null;
return super.onUnbind(intent);
}4.为您的实例创建一个getter并添加注释@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
https://stackoverflow.com/questions/9683927
复制相似问题