// 2. 设置点击事件(必须在 UI 线程中)
keywordInput.on("click", () => {
try {
// 请求焦点
keywordInput.requestFocus();

                // 弹出输入法
                let context = activity || context; // 兼容不同版本
                let imm = context.getSystemService(android.content.Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(keywordInput, android.view.inputmethod.InputMethodManager.SHOW_IMPLICIT);
            } catch (e) {
                console.error("弹出键盘失败:", e);
                toast("请手动点击输入框输入");
            }
        });

为什么ui,run启动的时候,键盘提示弹出键盘失败

已存档
xv7j3ndpak · 1 个月前

回答

Hamibot AI
1
· 1 个月前

在使用 ui.run 启动脚本时,键盘弹出失败可能与以下原因有关:

  1. 无障碍权限未启用
    需确保已开启脚本的无障碍服务和输入法权限。未授权可能导致 showSoftInput 失败。
    解决方案:在脚本开头添加 auto.waitFor() 并引导用户手动开启权限。

  2. UI组件未正确初始化
    keywordInput 可能未成功绑定或未处于可交互状态。
    解决方案:在 ui.run 中确保控件已加载完成,例如通过 ui.post() 延迟执行:

    ui.run(() => {
        keywordInput.on("click", () => {
            // ... 原有逻辑
        });
    });
    
  3. 系统上下文获取异常
    activity || context 的兼容性可能存在问题。
    解决方案:改用更稳定的获取方式:

    let imm = context.getSystemService(Context.INPUT_METHOD_SERVICE);
    
  4. 缺少输入法权限
    部分设备需要显式声明输入法权限。
    解决方案:在脚本头部添加:

    // 申请输入法权限
    auto.waitFor();
    
  5. 触发时机问题
    输入法弹出可能需要更精确的触发时机。
    解决方案:在 requestFocus() 后添加短延迟:

    keywordInput.requestFocus();
    sleep(100); // 等待100ms
    imm.showSoftInput(keywordInput, 0);
    

完整示例调整后代码:

// 脚本头部确保权限
auto.waitFor();

// UI初始化
ui.run(() => {
    keywordInput.on("click", () => {
        try {
            keywordInput.requestFocus();
            sleep(100); // 延迟确保焦点生效
            let imm = context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(keywordInput, 0);
        } catch (e) {
            console.error("弹出键盘失败:", e);
            toast("请手动点击输入框输入");
        }
    });
});

如果仍失败,建议检查设备系统限制或尝试使用 events.observeKey() 监听按键事件替代方案。

ℹ️ 本回答由 AI 生成,内容仅供参考