AccessibilityNodeInfo — отправить текст

Я разрабатываю приложение для 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, где мы создаем свою собственную клавиатуру и отправляем текст через эту программную клавиатуру. Я много чего не понял...

может кто-нибудь помочь мне в этом.


person amithgc    schedule 16.04.2014    source источник
comment
Амит, ты понял, как добиться ACTION_PASTE на уровне API ниже 18?   -  person androidGuy    schedule 17.10.2014
comment
пока нет возможности это сделать   -  person amithgc    schedule 25.10.2014


Ответы (3)


Вы можете использовать ACTION_PASTE из API 14, но вы должны вызывать AccessibilityRecordCompat и AccessibilityNodeInfoCompat, как здесь:

AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
AccessibilityNodeInfoCompat source = record.getSource();
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);
person Anton Kashpor    schedule 12.01.2015

Вы можете получить представление с текущим фокусом:

public View getCurrentFocus() {
    return mWindow != null ? mWindow.getCurrentFocus() : null;
}

И затем настройка текста:

editTextObject.setText(CharSequence)
person kikoso    schedule 25.04.2014
comment
Мне нужно отправить текст в сфокусированное поле EditText других приложений. Как получить экземпляр активности? нельзя правильно.. - person amithgc; 28.04.2014

Да, вы можете использовать AccessibilityNodeInfo даже из API 14 и выше, но ACTION_PASTE вы должны использовать только из API уровня 18. Посмотрите http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html

person Ajit Kumar    schedule 28.04.2014