android方向 - 意图问题(相机)
Posted
技术标签:
【中文标题】android方向 - 意图问题(相机)【英文标题】:android orientation - issues with intents (camera) 【发布时间】:2012-06-23 13:44:34 【问题描述】:这是一个有趣的...
我正在为运行 android 2.3.3 及更高版本的设备编写一个应用程序。
它有一个通过 Intent 调用相机的主要活动。
如果用户点击按钮启动相机;然后拍照;然后单击“完成”以返回主活动 - 应用程序工作正常,并在主活动的图像视图中显示新图片。
但是,如果用户在纵向使用主要活动;然后单击按钮打开相机意图并将方向更改为横向;然后点击完成返回主活动 - 应用程序崩溃
但是……但是,如果用户在纵向使用主要活动;然后单击按钮打开相机意图并将方向更改为横向;然后将方向更改回纵向(在相机中),然后单击完成以返回主活动 - 然后应用程序继续正常运行。
我尝试过的东西: 我更改了清单文件以强制应用程序(主要活动)面向纵向(我也删除了这个) 我已将此行添加到主要活动中,以尝试处理从相机意图返回的活动的重新绘制:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
在调试窗口中,我收到描述空指针异常的错误 - 我认为这是因为在要传递图像的方向更改后视图不再存在,除非方向与离开时的方向相同。
我有点卡住了,希望得到一些建议。
【问题讨论】:
i56.tinypic.com/2iu97on.jpgh logcat 的崩溃 ***.com/questions/14066038/… 【参考方案1】:当您的屏幕方向改变时,您的Activity
将被销毁并以新的方向重新创建。因此,在 Activity
的生命周期内获得引用的任何变量都将不再引用任何内容,如果您随后尝试访问它们引用的对象而不重新分配它们的值,您将获得 NullPointerException
。
onSaveInstanceState()
方法用于在配置更改之间保存临时数据。这将创建一个 Bundle,当 Activity
再次启动时传递给 onCreate()
。
没有任何代码,我不知道这是不是你的问题,但值得一看。
请参阅http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges 了解更多信息(毫无疑问,这些信息比我提供的更准确)。
【讨论】:
感谢您的提示。在我的调查中,我实际上发现了两起我必须处理的崩溃。第一次崩溃是通过将这两种方法插入到我的主要活动中解决的:【参考方案2】:嘿,我不确定,但尝试将此属性放在清单文件中,希望它应该可以工作
android:configChanges="orientation|keyboardHidden"
【讨论】:
这可能会奏效,但 Google 不建议将其作为万不得已的手段 - 请参阅 developer.android.com/guide/topics/resources/… @DroidWormNarendra 告诉我你到底想用软键盘做什么? @PriyankBhojak 我不想用软键盘做任何事情。我只是想防止屏幕旋转,这发生在捕获和保存图像之后。 @DroidWormNarendra 如果您将相机与 SurfaceView 一起使用,那么您可以添加以下行:camera.setDisplayOrientation(90);在您的 surfaceChanged 方法中。如果您使用的是本机相机,则可以使用 ExifInterface,请参见此处:***.com/questions/20478765/…,如果有人试图帮助您,您不应该拒绝回答。 @PriyankBhojak,我使用了您的解决方案,它工作正常。太棒了!【参考方案3】:三星 S3 和 S4 等一些 Android 设备在横向模式下具有默认的相机表面视图。 当您调用相机并捕获图像并进入您的应用程序时,无论您是否设置了方向 PORTRAIT,它都会首先以 LANDSCAPE 模式打开,然后更改为 PORTRAIT 模式。
它的 Android 操作系统行为。
由于这个活动重新创建它自己。那时你得到空指针异常。
你可以通过在menifest文件中设置configChanges
来处理。
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
您可以将数据临时存储在@Spinner 在他的回答中正确地说的onSaveInstanceState()
。
【讨论】:
以上是关于android方向 - 意图问题(相机)的主要内容,如果未能解决你的问题,请参考以下文章