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

Android12/13虚拟第二屏启动Activity并模拟点击输入的实现问询

抱歉,在标准Android系统中,外部显示屏仅支持显示功能。您可以在主显示屏(如手机或平板)上收集输入,以此影响外部显示屏的内容(如调用WebView的pageDown()或pageUp()方法),但仅此而已。

针对你提出的在虚拟第二显示屏的Activity中模拟点击、输入并获取视图信息的需求,方案如下:

核心结论

完全可以实现,但需要依赖系统权限和对应技术方案,同时需注意权限合规性和第三方应用的反制逻辑。

可行实现方案

1. 基于AccessibilityService实现(推荐用于发布应用)

无障碍服务本身不区分显示屏,只要目标Activity处于系统前台(无论在主屏还是虚拟屏),且你的应用已获得无障碍权限,就能:

  • 通过AccessibilityService.getWindows()获取所有系统窗口,通过窗口的displayId匹配你创建的虚拟显示屏ID,锁定目标窗口;
  • 遍历窗口对应的AccessibilityNodeInfo树,获取聊天室标题、输入框、发送按钮等控件信息;
  • 调用performAction()方法执行模拟点击、输入文本等操作,比如给输入框设置文本:nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, Bundle.of(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "自动发送的消息")),点击发送按钮则用ACTION_CLICK。

注意:无障碍权限是敏感权限,应用必须向用户清晰说明用途,且系统会弹出明确的授权提示,用户拒绝后无法使用该功能。

2. 利用Instrumentation(仅限调试/测试场景)

如果是用于自动化测试或调试,可以使用Instrumentation类模拟输入事件,但该方案存在严格限制:

  • 需要申请android.permission.INJECT_EVENTS权限,该权限仅对系统应用或通过adb授权的应用开放,普通发布应用无法获取;
  • 模拟点击的示例代码:
    Instrumentation instrumentation = new Instrumentation();
    // 模拟按下事件
    MotionEvent downEvent = MotionEvent.obtain(SystemClock.uptimeMillis(),
            SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, targetX, targetY, 0);
    instrumentation.sendPointerSync(downEvent);
    // 模拟抬起事件
    MotionEvent upEvent = MotionEvent.obtain(SystemClock.uptimeMillis(),
            SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, targetX, targetY, 0);
    instrumentation.sendPointerSync(upEvent);
    downEvent.recycle();
    upEvent.recycle();
    

关键注意事项

  • 虚拟显示屏上的Activity和主屏Activity属于同一系统窗口体系,操作逻辑无本质区别,核心是权限获取;
  • 第三方应用(如微信)可能存在反自动化检测,频繁的无障碍操作或异常输入可能触发风控,导致账号受限;
  • 不同Android版本对虚拟显示屏的窗口管理有细微差异,需在目标版本(如Android 10+)上充分测试兼容性。

内容的提问来源于stack exchange,提问作者brian chan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:07:35