Android Galaxy S3-以纵向模式拍照会破坏活动

Android Galaxy S3-以纵向模式拍照会破坏活动,android,android-activity,camera,galaxy,Android,Android Activity,Camera,Galaxy,因此,这个问题在这个论坛上被以多种形式提出,但没有一个答案对我有帮助。我有一个bug,我只能在三星Galaxy S3上复制 我只想用手机的摄像头拍摄并储存一张照片,但在收到onActivityResult的回复之前,我的活动就被破坏了。这只发生在我在纵向模式下使用相机时,在横向模式下就可以了 我正在使用以下代码启动相机: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(inte

因此,这个问题在这个论坛上被以多种形式提出,但没有一个答案对我有帮助。我有一个bug,我只能在三星Galaxy S3上复制

我只想用手机的摄像头拍摄并储存一张照片,但在收到onActivityResult的回复之前,我的活动就被破坏了。这只发生在我在纵向模式下使用相机时,在横向模式下就可以了

我正在使用以下代码启动相机:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, Config.ACTIVITY_TAKE_PHOTO);
在纵向模式下,我从未看到对onActivityResult的调用(从Camera活动),我只看到在启动活动中调用了onDestroy()。日志中没有异常或错误,也没有使其崩溃的明显错误

我看到一些帖子建议将“android:configChanges=“orientation | keyboardHidden”添加到清单中,并做许多其他事情来管理使用相机时发生的方向更改,但到目前为止没有任何帮助


还有其他人解决了这个问题吗?

在某些情况下,Android可以调用destroy()方法。一个是当我们使用finish()方法时。另一种方法是使用Activity类中的isFinishing()方法。如果真的要完成,你可以完成他们的资源,否则,你可以保留这些值​​已分配继承应用程序的类

@Override
protected void onDestroy() {

    final YourApp app = (YourApp) getApplicationContext();
    if (app != null && isFinishing()) {
        app.finalizeAppResources();
    }

    // ...

    super.onDestroy();
}

如果您的目标超出API级别13,请添加

android:configChanges="orientation|keyboardHidden"
仅凭清单是不够的

从中检查此摘录

注意:如果应用程序的目标API级别为13或更高级别(由minSdkVersion和targetSdkVersion属性声明),则还应声明“屏幕大小”配置,因为当设备在纵向和横向方向之间切换时,该配置也会更改

因此,请尝试添加

android:configChanges="orientation|keyboardHidden|screenSize"

到您的清单文件。这将解决您的问题。

。可以设置显示方向。我有一个GalaxyS3,我在开发者网站上使用了这段代码。我无法复制你面临的问题。但是我遇到了一个不同的问题,显示方向是纵向的,图像被捕获了,但保存的图像被旋转了。你应该阅读这个讨论,并且意识到如果你看到onDestroy(),Android并没有终止你的进程。还有别的事情。请务必阅读并吸收活动生命周期文档,同时也要意识到,
android:configChanges=“orientation | keyboardHidden
是一种隐藏许多罪恶(bug)的黑客行为,除非你真正理解它。西蒙,你对如何获取有关onDestroy()的更多信息有什么建议吗关于我的活动?我可以做些什么来打印出更详细的堆栈跟踪吗?
Thread.currentThread().getStackTrace()
因此,听起来我不应该再担心如何防止屏幕方向的改变以及由此导致的活动破坏,而应该更多地关注每次图像捕获后从onDestroy中优雅地恢复?这对我来说非常有用me@dishan我理解这里的方向和屏幕大小标志,但为什么键盘隐藏?@TashPemhiwa是的这个特殊的问题
keyboardHidden
可能没有效果。因此
android:configChanges=“orientation”屏幕大小“
也应该有效。但同样地,包含
keyboardHidden
将为您提供额外的保护,因为它还可以防止在键盘可用性更改事件中重新启动您的活动
orientation
keyboardHidden
是Android中最常用的配置更改,人们希望在不重新启动活动的情况下自行处理这些更改。因此,隐藏
键盘将是明智之举。