I am developing an Android app, where I have to send text to focused EditText field of other Applications.
I have done it in API level 18 and above using AccessibilityService, when I find the EditText, I paste the data from ClipBoard. Here is the code,
public class TestService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo source = event.getSource();
if (source != null && event.getEventType() == AccessibilityEvent.TYPE_VIEW_CLICKED && event.getClassName().equals("android.widget.EditText")) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "TEST DATA");
clipboard.setPrimaryClip(clip);
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);
}
}
}
But, AccessibilityNodeInfo.ACTION_PASTE is available in API level 18 and above.
Can we achieve the same in API Level < 18 ?
I read in some blogs that it can be done using InputMethodService, where we create our own keyboard and send text via that soft keyboard. I did not understand much of it...
can someone help me on this.
You can use ACTION_PASTE from API 14, but you have to call AccessibilityRecordCompat and AccessibilityNodeInfoCompat like there:
AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
AccessibilityNodeInfoCompat source = record.getSource();
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With