我正在开发一款Android应用,我必须将文本发送到其他应用的焦点EditText
字段。
我已使用API level 18
在AccessibilityService
及更高版本中完成此操作,当我找到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
来完成,我们创建自己的键盘并通过该软键盘发送文本。我对此并不了解......
有人可以帮我解决这个问题。
答案 0 :(得分:1)
您可以使用API 14中的ACTION_PASTE,但您必须在那里拨打AccessibilityRecordCompat
和AccessibilityNodeInfoCompat
:
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