AccessibilityNodeInfo – 发送文本

我正在开发一个Android应用程序,我必须发送文本到其他应用程序的EditText字段。

我使用AccessibilityServiceAPI level 18和更高版本中完成了这项工作,当我findEditText ,我从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完成,在这里我们创build我们自己的键盘并通过软键盘发送文本。 我不太了解它

有人可以帮我这个。

Solutions Collecting From Web of "AccessibilityNodeInfo – 发送文本"

您可以使用API​​ 14中的ACTION_PASTE,但必须像这样调用AccessibilityRecordCompatAccessibilityNodeInfoCompat

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

你可以得到当前关注的观点:

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

然后设置文本:

 editTextObject.setText(CharSequence) 

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