我正在尝试在我的应用程序中使用相机拍摄图像后进行预览,我确信路径不为空,但我在这行代码中收到了错误:Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),options);
并且没有图像视图。注:我在另一台设备上测试了该代码(不是三星)它可以正常工作。
我正在尝试在我的应用程序中使用相机拍摄图像后进行预览,我确信路径不为空,但我在这行代码中收到了错误:Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),options);
并且没有图像视图。注:我在另一台设备上测试了该代码(不是三星)它可以正常工作。
mView
变为 null。这也发生在三星的其他意图中,不仅仅是相机。要修复它,您必须在清单文件中添加以下行到您的活动下面:android:configChanges="orientation|screenSize"
谷歌在文档中提到:
从Android 3.2(API level 13)开始,当设备在纵向和横向方向之间切换时,“屏幕大小”也会发生变化。因此,如果您想要在开发API级别为13或更高版本(由minSdkVersion和targetSdkVersion属性声明)的应用程序时防止由于方向更改而导致运行时重启,您必须除了包含“orientation”值外还要包含“screenSize”值。也就是说,您必须声明
android:configChanges="orientation|screenSize"
。然而,如果您的应用程序针对API级别12或更低版本,则您的活动始终自己处理此配置更改(即使在Android 3.2或更高版本设备上运行,此配置更改也不会重新启动您的活动)。
我为这个错误苦苦挣扎了好几天,这是因为三星相机应用默认处于横屏模式。
如果你从竖屏模式的活动中启动相机应用,在它从横屏回来时会自动再次调用OnCreate,这就是为什么你的路径为空的原因。
我通过在活动中添加一个静态计数器来解决这个问题。如果计数器等于0,则调用oncreate并完成所有操作;如果大于0,则只加载布局。
是的,没错。
AJ提到的就是解决方案:
android:configChanges="orientation|screenSize"
它还解决了另一个问题,即由于每次旋转手机都会调用OnCreateView方法而引起的问题;只要您使用了onSaveInstance()
来存储初始值,就可以帮助防止不同的编辑字段恢复到其原始值。您可以参考这个视频-
https://www.youtube.com/watch?v=_K_qlNluW38&index=67&list=PLHs_NFdr_LaHmEh7hV-wPyS-gKnAVPzBU