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方向 - 意图问题(相机)的主要内容,如果未能解决你的问题,请参考以下文章

Android中的相机方向问题

相机意图图像预览方向

相机意图应用程序崩溃

来自画廊/相机意图的图片方向[重复]

Android 相机意图

android中相机捕获的隐式意图