Skip to content

**SecondaryScreen** 支持单指、双指、多指触摸,可弹出软键盘,可隐藏,可scrcpy映射的副屏模拟器

License

Notifications You must be signed in to change notification settings

Mr-JingShi/SecondaryScreen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a8b46a9 · Mar 20, 2025

History

85 Commits
Dec 23, 2024
Nov 26, 2024
Sep 24, 2024
Mar 20, 2025
Mar 20, 2025
Nov 28, 2024
May 31, 2024
Jul 11, 2024
Nov 1, 2024
May 31, 2024
Nov 1, 2024
May 31, 2024
Nov 28, 2024

Repository files navigation

SecondaryScreen 一款简单好用的副屏模拟器

背景

最近几年新能源电车大火,华为等不少厂商推出了副驾屏,不少车机应用开始支持副驾屏,用以实现主副屏联动。

同时,多屏联动也可以用于以下场景:

  • 酒店登记:酒店员工通过一个屏幕操作,顾客通过另一个屏幕查看相关登记信息。
  • 超市收银:超市收银员通过一个屏幕操作,顾客通过另一个屏幕查看相关收银信息。
  • 演示文稿:演示者可以在一个屏幕上播放要演示的文稿,同时在另一个屏幕上显示备注。
  • 多屏协同:多个屏幕连接在一起,每个屏幕可以显示不同的内容,提高多任务处理效率。

通过AndroidStido模拟器模拟辅助显示设备可以了解到,overlay方式永远有一个叠加屏遮盖,而且大部分电脑屏幕不是触摸屏,无法响应多指触摸事件,同时部分设备无法弹出软键盘等问题。因此此项目旨在解决上述问题。

目标

支持单指、多指触摸,可弹出软键盘,无遮盖(或者可隐藏),可scrcpy映射。

简介

app -- 副屏APP

模仿Android系统的“模拟辅助显示设备”,可放大缩小悬浮窗,扩展了:锁定悬浮窗(操作内部surface),隐藏(最小化)悬浮窗等功能。发送实时触摸事件给server,接受video编码后的数据,通过MediaCodec将video解码,将video渲染到悬浮窗surface上。

sample -- SecondaryScreenSample APP

模拟开发项目,主屏幕上显示“主屏”字样,副屏幕上显示“副屏”字样,还提供了触摸拖动文字功能。

server -- 副屏APP‘s server

通过反射方式创建一个virtualdisplay,此virtualdisplay的surface是一个ImageReader创建的surface,因此主屏上无任何副屏相关的渲染内容。接收实时触摸事件,修改displayId后完成事件注入以响应副屏APP中触发的触摸事件,通过MediaCodec将video编码,推送给副屏APP,以完成video渲染。

目前server已集成到副屏APP,server也可以独立运行,具体方式参考jar包操作步骤

注意事项

因Google从Android 10开始才支持带displayId的事件注入,因此此模拟器仅支持Android 10及以上机型。

Android 10 ~ 12设备上创建virtualdisplay后,APP可以识别到virtualdisplay,但是在通过指定displayId拉起activity时会报权限错误。 可以通过am start命令拉起activity,此时模拟器就无法覆盖到APP正常拉起activity的逻辑,此时需要配置firstActivity和secondActivity的名称。

Android 13及以上设备上创建virtualdisplay后,APP可以识别到virtualdisplay,在通过指定displayId拉起activity时可正常拉起activity,无任何权限问题,因此极力推荐使用Android 13及以上设备。

Android 10及以上设备可以通过adb tcpip 5555开启ADB WIFI调试,APP内部通过输入端口号进行连接,连接成功后APP具有ADB shell权限,APP可以直接启动server。

Android 11及以上设备支持ADB WLAN调试,APP内部可以通过输入6位配对码和端口号进行配对,配对成功后APP具有ADB shell权限,APP可以直接启动server。

操作

电脑模拟副屏

  1. 手动加载server-jar包或副屏APP连接/配对ADB调试启动server
  2. scrcpy --display-id=?

单Android设备悬浮窗模拟副屏

  1. 副屏APP连接/配对ADB调试启动server

另一台Android设备模拟副屏

  1. 主设备上副屏APP连接/配对ADB调试启动server

  2. 另一台设备上副屏APP连接主设备

感谢

特别感谢scrcpy,给了我诸多灵感。

License

Copyright 2024 © 苏明白

Dual licensed under the terms of Apache-2.0 license.

About

**SecondaryScreen** 支持单指、双指、多指触摸,可弹出软键盘,可隐藏,可scrcpy映射的副屏模拟器

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published