I created an AccessibilityService that works correctly, and onAccessibilityEvent() is called for each event. What I want to do is fill in the EditText in the browser from my Service. I can get this to work in regular applications using AccessibilityNodeInfo.ACTION_PASTE . However, this does not work with EditText in a browser such as Chrome, although they seem the same.
Here's how I set up the service:
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); }
And how I communicate with events:
@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); }
I defined additional parameters in the xml file from the manifest using:
<intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/access" />
All this seems to work separately from EditText , for example, in Chrome .. nothing appears, no other options? LastPass seems to do it somehow :-)
source share