绑定到Android中的AccessibilityService?

alv*_*aro 6 service binding android accessibility

我创建了一个android Service,它扩展了一个AccessibilityService.从我Activity,我想绑定到那Service.因为我需要从发送信息ServiceActivity.我需要示例代码.我搜索过谷歌并没有找到类似的东西,有人可以给一个例子链接.

ala*_*anv 13

虽然可以从Activity绑定AccessibilityService,但您只能将AccessibilityEvents传递到服务中.这是因为AccessibilityService.onBind()被声明为final,这意味着您将无法向绑定器添加任何新方法.

但是,有几种替代解决方案.

如果您的活动和服务在同一进程中运行(如果它们位于同一个APK中,则通常是这样),那么您可以与辅助功能服务的静态实例进行通信.这是一个如何工作的例子:

MyAccessibilityService.java:

private static MyAccessibilityService sSharedInstance;

protected void onServiceConnected() {
    . . .
    sSharedInstance = this;
}

public boolean onUnbind(Intent intent) {
    sSharedInstance = null;
    . . .
}

public static MyAccessibilityService getSharedInstance() {
    return sSharedInstance;
}
Run Code Online (Sandbox Code Playgroud)

MyActivity.java

protected void onCreate() {
    . . .
    mAccessibilityService = MyAccessibilityService.getSharedInstance();
    if (mAccessibilityService != null) {
        // The service is running and connected.
        mAccessibilityService.doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的服务和活动位于不同的流程中(例如单独的APK),那么您仍有几个选择:

  • 通过将您的活动中的Intent 广播到您服务中的BroadcastReceiver进行通信
  • 将您的活动绑定到AccessibilityService进程中与静态实例通信的"代理"服务(如上所述)

如果您需要详细说明其中任何一个,请发表评论.