您无法绑定到AccessibilityService,因为其onBind()
方法声明为final。
但是,您可以通过将其存储在静态字段中来使用其实例。
在您的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://dev59.com/WWcs5IYBdhLWcg3w7IM9#12557673中的回复。
onBind()
标记为final。如果你查看AccessibilityService
源代码,你会发现他们自己在内部使用它。 - CommonsWare