8

我正在开发一个 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 Level < 18 中达到同样的效果吗?

我在一些博客中读到它可以使用 来完成InputMethodService,我们在其中创建自己的键盘并通过该软键盘发送文本。很多我没看懂。。。

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

4

3 回答 3

1

您可以使用 API 14 中的 ACTION_PASTE,但您必须调用AccessibilityRecordCompatAccessibilityNodeInfoCompat喜欢那里:

AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
AccessibilityNodeInfoCompat source = record.getSource();
source.performAction(AccessibilityNodeInfo.ACTION_PASTE);
于 2015-01-12T12:08:15.253 回答
0

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

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

然后设置文本:

editTextObject.setText(CharSequence)
于 2014-04-25T13:16:43.283 回答
0

是的,您甚至可以从 API 14 及更高版本使用 AccessibilityNodeInfo,但 ACTION_PASTE 您只能从 Api 级别 18 使用。看看 http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html

于 2014-04-28T08:23:49.303 回答