AccessibilityService实现无覆盖插入字符及模拟退格功能咨询
在AccessibilityService中实现输入框插入字符与退格的正确方式
插入字符(保留原有内容)
从Android API 26(Android 8.0)开始,AccessibilityNodeInfo提供了ACTION_INSERT_TEXT动作,可直接在光标位置插入文本,无需维护全局变量:
// 获取当前聚焦的输入框节点 AccessibilityNodeInfo inputNode = getRootInActiveWindow().findFocus(AccessibilityNodeInfo.FOCUS_INPUT); if (inputNode != null && inputNode.isEditable()) { Bundle insertArgs = new Bundle(); insertArgs.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "要插入的内容"); inputNode.performAction(AccessibilityNodeInfo.ACTION_INSERT_TEXT, insertArgs); inputNode.recycle(); // 务必回收节点避免内存泄漏 }
如果需要兼容API 26以下版本,可先获取输入框现有文本,拼接后通过ACTION_SET_TEXT更新:
if (inputNode != null && inputNode.isEditable()) { CharSequence currentText = inputNode.getText(); CharSequence updatedText = currentText + "要插入的内容"; Bundle setArgs = new Bundle(); setArgs.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, updatedText); inputNode.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, setArgs); inputNode.recycle(); }
模拟退格键操作
直接调用ACTION_PERFORM_BACKSPACE动作即可模拟按下退格键,自动删除光标前的字符:
AccessibilityNodeInfo inputNode = getRootInActiveWindow().findFocus(AccessibilityNodeInfo.FOCUS_INPUT); if (inputNode != null && inputNode.isEditable()) { inputNode.performAction(AccessibilityNodeInfo.ACTION_PERFORM_BACKSPACE); inputNode.recycle(); }
方案优势
这种方式直接针对当前聚焦的输入框节点操作,无需维护全局文本变量,切换输入框时无需额外清空变量,完美适配不同输入框的独立状态。
内容的提问来源于stack exchange,提问作者JOTA
相关产品推荐
相关产品推荐

