我已经创建了一个 android 服务,它是一个 AccessibilityService
。从我的 Activity 中,我想绑定(bind)到该服务。没有进程间通信,所以我尝试创建一个只返回服务的本地 Binder
实现(如本例中的 http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html )。
问题是 AccessibilityService
中的 onBind
是 final
并且我无法覆盖它以返回我的本地 Binder 。
这是否意味着我需要使用 AIDL 才能绑定(bind)到服务?
最佳答案
您不能绑定(bind)到 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;
}
最后在您的 Activity 中或您需要的任何地方:
MyAccessibilityService accessibilityService = MyAccessibilityService .getInstance();
if(accessibilityService != null){
//do smth here:
}
在我的应用程序中实现,目前运行良好。 感谢alanv 的回复https://stackoverflow.com/a/12557673/5502121
关于android 绑定(bind)到 AccessibilityService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9683927/