6

我创建了一个AccessibilityService可以正常工作并onAccessibilityEvent()在每个事件上调用的。我想要做的是EditText从我的服务中在浏览器中填充一个。我可以使用AccessibilityNodeInfo.ACTION_PASTE. 但是,这不适用于EditTexts 在 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 似乎以某种方式做到了:-)

4

0 回答 0