问题描述
- 关于竖屏相机调用横版拍照的系统相机问题
-
在我的程序里面,有个Activity是锁定竖屏的,点击拍照按钮,将会调用系统的相机进行拍照,现在遇到的问题是:如果这个系统相机是默认横屏拍照的,那么在程序跳转会发生横竖屏切换,在拍照返回结果的时候,我的Activity被重新创建了!试过这个方法:
下面记录一下开发中遇到的问题,说道这里不得不吐槽一下三星的相机,调用之后系统会调用ondestroy导致activity被销毁重建,原因是系统调用了一次横竖屏切换,解决方法如下
方法一:刚开始调用了onSaveInstanceState(Bundle savedInstanceState)和onRestoreInstanceState(Bundle savedInstanceState)这个方法来实现,虽然方法比较笨,但是可以通过在onSaveInstanceState中保存一些你需要的变量,在onCreate()方法中判断savedInstanceState是否为null,不为null则调用onRestoreInstanceState()方法取出之前存的变量来使用,这相当于重新加载了一边当前activity。
方法二:上面的方法可行,但并不是解决问题的根本办法,后来通过查看发现在调用相机时,activity从竖屏切换到了横屏,在横竖屏切换导致了activity重新装载,找到根本原因后,在activity中通过android:configChanges="orientation|keyboardHidden" 这个属性,可以约束调用相机时,保持当前activity竖屏状态不变,从而解决了activity重新加载的问题。
但是并不起作用。在拍照的时候,还是会出现问题。
另外也试过这个:http://www.zhihu.com/question/21541629(android 调用三星i9300系统相机出现Activity 自动onDestory?)
这个方案能保证Activity不被销毁,但是无法区分是拍照结果是取消还是确定,因为每一次调用返回的都是同一个值
所以想问一下,有没有什么处理方法
(我观察过,QQ也是调用系统相机,但是他不敢是在三星手机还是在其他手机上面,都能够很好的兼容,而58和赶集则是采用自己定义的相机,可能很大的原因就是避开系统相机的兼容性,更何况各种其他第三方相机)
http://ask.csdn.net/#
解决方案
在3.2系统之上要在加一个属性:screenSize。就可以阻止activity不进行横竖屏切换
解决方案二:
建议你直接调用系统相机,就可以避过这个问题了
解决方案三:
相机本身内存占用就多。
不管如何都得考虑打开相机的Activity被finish或者因为内存等原因被kill的情况。所以onSaveInstanceState是必须的。
解决方案四:
在3.2系统之上要在加一个属性:screenSize。就可以阻止activity不进行横竖屏切换