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

Android 13中startActivities启动分屏失效,求可行解决方案

Android 13 单屏启动分屏模式解决方案

问题背景

此前通过包含生命周期监听、启动Home页重置窗口状态的复杂逻辑实现双Activity分屏启动,但该方案在Android 13(API 33)中失效,需要适配新的系统规则。

适配方案

Android 13简化了分屏启动的流程,无需依赖hack式的窗口状态重置,只需正确配置Intent和启动选项即可:

修改后的核心代码

import android.app.ActivityOptions
import android.content.Intent
import android.os.Build
import android.view.WindowManager
import androidx.annotation.RequiresApi
import androidx.fragment.app.FragmentActivity

@RequiresApi(Build.VERSION_CODES.O)
fun launchSplitScreenMode(parent: FragmentActivity, intentTop: Intent, intentBottom: Intent) {
    parent.apply {
        // 配置Intent基础标记,确保新任务栈启动
        intentTop.apply {
            addCategory(Intent.CATEGORY_LAUNCHER)
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_MULTIPLE_TASK
        }

        intentBottom.apply {
            addCategory(Intent.CATEGORY_LAUNCHER)
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_MULTIPLE_TASK
        }

        // 创建分屏启动选项
        val options = ActivityOptions.makeBasic().apply {
            // 设置分屏模式
            setLaunchWindowingMode(WindowManager.LayoutParams.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY)
            // 设置分屏创建方向(顶部/左侧为主窗口)
            setSplitScreenCreateMode(ActivityOptions.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT)
        }

        // 启动双Activity到分屏
        startActivities(arrayOf(intentBottom, intentTop), options.toBundle())
        
        // 结束当前Activity(按需选择)
        finish()
    }
}

关键注意事项

  • 多窗口支持校验:确保目标Activity在Manifest中设置android:resizeableActivity="true"(默认值为true,若显式设为false会导致分屏启动失败)。
  • 启动模式限制:避免将目标Activity的android:launchMode设为singleInstance或singleTask,这类模式的Activity会独占任务栈,无法进入分屏。
  • 版本兼容:如果需要适配Android 12及以下版本,可以保留原方案作为分支,仅对Android 13及以上使用上述新逻辑。

内容的提问来源于stack exchange,提问作者M. Usman Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:40:38