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

如何在Galaxy Fold展开状态下启用外屏并在副屏启动Activity?

解决方案

1. 修正副屏获取逻辑

你当前直接调用getDisplay(0)的写法是错误的,默认Display ID为0的设备是主屏,正确的副屏遍历逻辑如下:

val displayManager = getSystemService(DISPLAY_SERVICE) as DisplayManager
// 过滤所有可用副屏
val secondaryDisplays = displayManager.displays.filter { 
    it.type == Display.TYPE_EXTERNAL || it.type == Display.TYPE_OVERLAY 
    // 部分厂商折叠屏副屏会标记为TYPE_PRIVATE,可根据实际测试结果添加过滤条件
}
if (secondaryDisplays.isEmpty()) {
    // 无可用副屏,提前拦截异常
    return
}
val targetDisplay = secondaryDisplays.first()

2. 提前配置权限与清单属性

  • 清单文件声明基础权限:
<!-- 唤醒屏幕权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 安卓12+ 副屏启动Activity权限 -->
<uses-permission android:name="android.permission.ACTIVATE_ON_SECONDARY_DISPLAYS" />
<!-- 锁屏场景展示权限 -->
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
  • 给需要在外屏启动的SecondActivity添加多屏适配配置:
<activity
    android:name=".SecondActivity"
    android:resizeableActivity="true"
    android:showWhenLocked="true"
    android:turnScreenOn="true"
    android:launchMode="singleInstance" />
  • 注意:目前绝大多数折叠屏设备厂商都对第三方应用限制了副屏调用权限,需要引导用户手动在系统设置中开启应用的「在外屏显示」权限,部分厂商还需要在对应开放平台申请官方权限才能调用副屏能力。

3. 修正启动Activity逻辑

val options = ActivityOptions.makeBasic()
options.launchDisplayId = targetDisplay.displayId
val intent = Intent(this, SecondActivity::class.java).apply {
    // 添加必要启动Flag
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
    // 唤醒屏幕相关Flag
    addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON.toInt())
    addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON.toInt())
    addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON.toInt())
}
startActivity(intent, options.toBundle())

4. Presentation方案适配

如果要使用Presentation实现副屏输出,需要使用副屏专属Context创建实例,同时配置窗口属性:

// 基于副屏创建专属Context
val displayContext = createDisplayContext(targetDisplay)
val presentation = Presentation(displayContext, targetDisplay)
presentation.window?.apply {
    setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
    addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
    addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN)
}
presentation.setContentView(R.layout.your_cover_screen_layout)
presentation.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:27:02