Android模拟辅助显示设备

模拟辅助显示设备

Android开发者选项中有一个“模拟辅助显示设备”配置项,可模拟一个副屏。

image.png

开启“模拟辅助显示设备”后,可以通过dumpsys display | grep mBaseDisplayInfo=DisplayInfo命令查看当前已创建的副屏信息。

% adb shell dumpsys display | grep mBaseDisplayInfo=DisplayInfo
    mBaseDisplayInfo=DisplayInfo{"内置屏幕", displayId 0", displayGroupId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 1200 x 1920, largest app 1200 x 1920, smallest app 1200 x 1920, appVsyncOff 1000000, presDeadline 17111110, mode 1, defaultMode 1, modes [{id=1, width=1200, height=1920, fps=90.0, alternativeRefreshRates=[]}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[2, 3], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state ON, type INTERNAL, uniqueId "local:4630946861623396481", app 1200 x 1920, density 240 (207.346 x 207.523) dpi, layerStack 0, colorMode 0, supportedColorModes [0, 7, 9], address {port=129, model=0x40446da284c5c8}, deviceProductInfo DeviceProductInfo{name=, manufacturerPnpId=QCM, productId=1, modelYear=null, manufactureDate=ManufactureDate{week=27, year=2006}, connectionToSinkType=0}, removeMode 0, refreshRateOverride 0.0, brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.5, installOrientation ROTATION_0}
    mBaseDisplayInfo=DisplayInfo{"叠加视图 #1", displayId 5", displayGroupId 0, FLAG_PRESENTATION, FLAG_TRUSTED, real 1920 x 1080, largest app 1920 x 1080, smallest app 1920 x 1080, appVsyncOff 0, presDeadline 28222221, mode 5, defaultMode 5, modes [{id=5, width=1920, height=1080, fps=90.0, alternativeRefreshRates=[]}], hdrCapabilities null, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state ON, type OVERLAY, uniqueId "overlay:1", app 1920 x 1080, density 320 (320.0 x 320.0) dpi, layerStack 5, colorMode 0, supportedColorModes [0], deviceProductInfo null, removeMode 0, refreshRateOverride 0.0, brightnessMinimum 0.0, brightnessMaximum 0.0, brightnessDefault 0.0, installOrientation ROTATION_0}

主屏幕的displayId为0,副屏幕的displayId为5,此副屏type为OVERLAY。

副屏叠加在主屏上,可以放大缩小,也可以移动,但不可隐藏与操作。

可通过神器scrcpy映射并操作副屏,注意:Android 10及以上机型才支持触摸事件。

通过scrcpy --list-display查看副屏。

% scrcpy --list-display
scrcpy 2.4 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  HA1XPP94                        device  TB331FC
/usr/local/Cellar/scrcpy/2.4/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 28.2 MB/s (69007 bytes in 0.002s)
[server] INFO: Device: [LENOVO] Lenovo TB331FC (Android 13)
[server] INFO: List of displays:
    --display-id=0    (1200x1920)
    --display-id=5    (1920x1080)

通过scrcpy --display-id映射并操作副屏。

% scrcpy --display-id=5
scrcpy 2.4 <https://github.com/Genymobile/scrcpy>
INFO: ADB device found:
INFO:     -->   (usb)  HA1XPP94                        device  TB331FC
/usr/local/Cellar/scrcpy/2.4/share/scrcpy/scrcpy-server: 1 file pushed, 0 skipped. 50.2 MB/s (69007 bytes in 0.001s)
[server] INFO: Device: [LENOVO] Lenovo TB331FC (Android 13)
[server] WARN: Display doesn't have FLAG_SUPPORTS_PROTECTED_BUFFERS flag, mirroring can be restricted
INFO: Renderer: metal
INFO: Texture: 1920x1080
image.png

开发者选项-模拟辅助显示设备中提供的副屏分辨率有限,我们可通过shell命令指定任意分辨率等参数。

shell命令创建一块副屏

$settings put global overlay_display_devices "WxH/DENSITY"

shell命令创建多块副屏(最多6块),注意携带secure参数时无法截屏、录屏。

$settings put global overlay_display_devices "WxH/DENSITY,secure;WxH/DENSITY,secure"

shell命令删除副屏

$settings put global overlay_display_devices "null"

$settings put global overlay_display_devices ""

$settings delete global overlay_display_devices

部分手机无法弹出软键盘,可通过打开Android手机开发者模式中的“绘图-强制桌面模式“解决,或者使用电脑键盘代替。

shell命令也可打开、关闭强制桌面模式。

查看强制桌面模式

$settings get global force_desktop_mode_on_external_displays

打开强制桌面模式

$settings put global force_desktop_mode_on_external_displays 1

关闭强制桌面模式

$shell settings put global force_desktop_mode_on_external_displays 0

overlay副屏存在的问题

scrcpy映射副屏方案能够解决大部分问题,但大部分电脑屏幕是非触摸屏,只可以用鼠标进行操作,鼠标只能模拟单指,无法模拟出双指、多指操组。且系统Overlay方式始终在主屏上有一个遮盖的叠加窗,这个叠加窗无法操作,更无法隐藏,因此在手机上开发一个可操作可隐藏的自定义悬浮窗迫在眉睫。

SecondaryScreen项目旨在解决上述问题,具体详情请参考:
SecondaryScreen源码

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容