Я разрабатываю приложение для Android, где мне нужно отправить текст в сфокусированное поле EditText
других приложений.
Я сделал это в API level 18
и выше, используя AccessibilityService
, когда я нахожу EditText
, я вставляю данные из буфера обмена. Вот код,
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);
}
}
}
Но AccessibilityNodeInfo.ACTION_PASTE
доступен на уровне API 18 и выше.
Можем ли мы добиться того же на уровне API ‹ 18?
Я читал в некоторых блогах, что это можно сделать с помощью InputMethodService
, где мы создаем свою собственную клавиатуру и отправляем текст через эту программную клавиатуру. Я много чего не понял...
может кто-нибудь помочь мне в этом.