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

已强制竖屏的Android应用横屏拍照返回后崩溃的bug如何解决?

问题核心特征
  • 应用已在Manifest、Activity代码中双端配置强制竖屏属性
  • 调用系统拍照意图MediaStore.ActionImageCaptureSecure,横屏拍摄后返回应用触发崩溃
  • 问题集中出现在安卓11系统设备,其余版本偶现
  • 已尝试在OnActivityResult末尾强制设置竖屏,修复未生效
根因说明

崩溃触发在OnActivityResult执行之前:横屏状态的相机应用返回时,部分安卓11系统会先触发调用方Activity的配置变更通知,系统尝试切换横屏渲染,此时你的页面没有适配横屏逻辑,会先触发崩溃,你写在OnActivityResult里的竖屏锁定代码根本没有执行机会。

解决方案

1. 新增配置变更拦截(优先推荐)

在Manifest的Activity配置中新增android:configChanges属性,声明你将自行处理方向、屏幕尺寸相关的配置变更,系统不会销毁重建Activity,也不会尝试触发横屏渲染:

<activity android:name=".MainActivity" 
    android:windowSoftInputMode="adjustPan"
    android:screenOrientation="portrait"
    android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"/>

该方案改动最小,可解决90%以上的同类偶现崩溃。

2. 提前在更早的生命周期节点加锁

如果还有偶现问题,在OnCreate和OnResume两个更早的生命周期节点都加上竖屏锁定,确保页面回到前台第一时间锁回竖屏:

// OnCreate中添加
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait;
    // 原有初始化逻辑
}

// OnResume中添加
protected override void OnResume()
{
    base.OnResume();
    RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait;
}

额外避坑提示

你当前使用Android.Net.Uri.FromFile传递文件Uri的逻辑,在安卓7.0及以上系统会触发FileUriExposedException,建议尽快替换为FileProvider实现,避免高版本设备直接崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 13:54:05