You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:12:41