我创建了一个AccessibilityService
可以正常工作并onAccessibilityEvent()
在每个事件上调用的。我想要做的是EditText
从我的服务中在浏览器中填充一个。我可以使用AccessibilityNodeInfo.ACTION_PASTE
. 但是,这不适用于EditText
s 在 Chrome 等浏览器中,即使它们似乎被检测到相同。
这是我设置服务的方式:
protected void onServiceConnected() {
super.onServiceConnected();
Log.v(TAG, "onServiceConnected");
_("CONNECTED");
toast("service connected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.flags = AccessibilityServiceInfo.DEFAULT |
AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS |
AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY |
AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS |
AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
setServiceInfo(info);
}
以及我如何处理事件:
@Override
public void onAccessibilityEvent(final AccessibilityEvent event) {
_("//////////////////onAccessibilityEvent");
final AccessibilityNodeInfo source = event.getSource();
if (source == null) {
return;
}
AccessibilityNodeInfo source = event.getSource();
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "MyData");
clipboard.setPrimaryClip(clip);
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);
}
我在清单中的 xml 文件中定义了更多选项,使用:
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice" android:resource="@xml/access" />
除了EditText
在 Chrome 中,这一切似乎都有效.. 什么都没有出现,还有其他选择吗?LastPass 似乎以某种方式做到了:-)