已强制竖屏的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
相关产品推荐
相关产品推荐

