三星Android相机横屏模式下onActivityResult返回数据为空
三星Android相机横屏拍照后onActivityResult数据为空的解决办法
问题场景
调用相机的Activity固定为竖屏模式,在三星设备上横屏拍摄图片后,onActivityResult中Intent data和mCurrentPhotoPath均为空,但竖屏拍摄功能正常。
问题原因
当相机以横屏模式拍照完成返回时,由于调用相机的Activity设置了固定竖屏,系统会触发Activity销毁重建流程,导致存储图片路径的成员变量mCurrentPhotoPath被清空,同时相机返回的Intent data也会因为配置变更出现异常。
解决方案
方案1:保存并恢复图片路径
在Activity的生命周期方法中保存和恢复mCurrentPhotoPath,避免重建时丢失数据:
@Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // 保存当前图片路径 outState.putString("current_photo_path", mCurrentPhotoPath); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_activity_layout); // 从重建状态中恢复路径 if (savedInstanceState != null) { mCurrentPhotoPath = savedInstanceState.getString("current_photo_path"); } }
方案2:禁止Activity因屏幕旋转重建
在AndroidManifest.xml中给调用相机的Activity添加configChanges属性,避免屏幕旋转触发重建:
<activity android:name=".DoctorVisit" android:screenOrientation="portrait" android:configChanges="orientation|screenSize|keyboardHidden"> </activity>
额外检查项
- 确认
createImageFile方法中创建的存储目录存在且有读写权限,Android 10+需适配分区存储规则 - 检查
FileProvider的paths.xml配置,确保能正确映射到图片存储目录
优化后的onActivityResult(容错处理)
增加空值判断的容错逻辑,提升稳定性:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_TAKE_PHOTO && resultCode == Activity.RESULT_OK) { if (mCurrentPhotoPath != null && !mCurrentPhotoPath.isEmpty()) { ArrayList<String> photoPaths = new ArrayList<>(); photoPaths.add(mCurrentPhotoPath); manageFileSize(photoPaths); } else { // 此处可添加拍照失败的提示逻辑 } } }
内容的提问来源于stack exchange,提问作者Sagar Zala
相关产品推荐
相关产品推荐

