我创建了一个 android Service
,它扩展了一个AccessibilityService
. 从我的Activity
,我想绑定到那个Service
。因为我需要从 to 发送Service
信息Activity
。我需要示例代码。我已经搜索了谷歌并没有找到任何类似的东西,请有人可以提供一个示例的链接。
问问题
5854 次
2 回答
21
虽然可以从 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;
}
我的活动.java
protected void onCreate() {
. . .
mAccessibilityService = MyAccessibilityService.getSharedInstance();
if (mAccessibilityService != null) {
// The service is running and connected.
mAccessibilityService.doSomething();
}
}
如果您的服务和活动在不同的进程中(例如单独的 APK),那么您仍然有几个选择:
如果您需要详细说明其中任何一个,请发表评论。
于 2012-09-24T01:07:54.867 回答
2
也许还有另一种相互交流的方式:
在
AccessibilityService
儿童班:处理目标 Activity 的:
PackageName AND
ActivityName AND
specific EventType (eg:AccessibilityEvent.TYPE_VIEW_CLICKED
)@Override public void onAccessibilityEvent(final AccessibilityEvent event) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED) if (AccessibilityUtils.findNodeInfoByViewTypeAndText(event.getSource(), "android.widget.ToggleButton", TextUtils.getString(R.string.lable_disabled)) != null) getAccessibilityService().disableSelf(); }
在
target Activity
:just 调用特定的 EventType用户调用或
代码调用btnEnableService.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !btnEnableService.isChecked()) { btnEnableService.setChecked(false); txvEnabledState.setText(btnEnableService.isChecked() ? R.string.lable_service_status_enabled : R.string.lable_service_status_closed); AppState.instance().setIsEnable(btnEnableService.isChecked()); } else { openAccessibilitySettings(); btnEnableService.setChecked(!btnEnableService.isChecked()); } } });
示例代码:
于 2017-06-08T05:25:48.773 回答