AccessibilityNodeInfo - 发送文本

时间:2014-04-16 05:26:54

标签: android accessibilityservice

我正在开发一款Android应用,我必须将文本发送到其他应用的焦点EditText字段。

我已使用API level 18AccessibilityService及更高版本中完成此操作,当我找到EditText时,我会从ClipBoard粘贴数据。这是代码,

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来完成,我们创建自己的键盘并通过该软键盘发送文本。我对此并不了解......

有人可以帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

您可以使用API​​ 14中的ACTION_PASTE,但您必须在那里拨打AccessibilityRecordCompatAccessibilityNodeInfoCompat

AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
AccessibilityNodeInfoCompat source = record.getSource();
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);

答案 1 :(得分:0)

您可以获得具有当前焦点的视图:

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

然后设置文本:

editTextObject.setText(CharSequence)

答案 2 :(得分:0)

是的,你甚至可以从API 14及以上使用AccessibilityNodeInfo,但只能在Api Level 18中使用ACTION_PASTE。 看一下 http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html