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
相关产品推荐
相关产品推荐

