Galaxy S3 - 以肖像模式拍摄照片会破坏活动

Tom*_*omb 13 camera android galaxy android-activity

所以,在这个论坛上已经以多种形式提出了这个问题,但没有一个答案对我有所帮助.我有一个我只能在三星Galaxy S3上重现的错误.

我想简单地使用手机的相机拍摄并存储照片,但在我从onActivityResult收到回复之前,我的活动正在被销毁.这只发生在我以纵向模式使用相机时,在横向模式下它很好.

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

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, Config.ACTIVITY_TAKE_PHOTO);
Run Code Online (Sandbox Code Playgroud)

在纵向模式下,我从未看到对onActivityResult的调用(来自Camera活动),我只看到在我的启动活动中调用的onDestroy().日志中没有异常或错误,并且没有明显错误使其崩溃.

我看过帖子建议在Manifest中添加"android:configChanges ="orientation | keyboardHidden"",并做很多其他事情来管理使用相机时发生的方向变化,但到目前为止没有任何帮助.

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

dis*_*han 19

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

android:configChanges="orientation|keyboardHidden"
Run Code Online (Sandbox Code Playgroud)

到清单是不够的.

Android文档中查看此摘录

注意:如果您的应用程序的目标是13级或更高级别的API(由minSdkVersion和targetSdkVersion属性声明),那么您还应该声明"screenSize"配置,因为当设备在纵向和横向之间切换时它也会发生变化.

因此尝试添加

android:configChanges="orientation|keyboardHidden|screenSize"
Run Code Online (Sandbox Code Playgroud)

到您的清单文件.这应该可以解决您的问题.


Dou*_*ari 1

Android 在某些场景下可以调用 destroy() 方法。一种是当我们使用 finish() 方法时。另一种方法是使用 Activity 类中的 isFinishing () 方法。如果确实正在最终确定,则可以最终确定其资源,否则,您可以将 \xe2\x80\x8b\xe2\x80\x8 的值保留为继承 Application 的类

\n\n
@Override\nprotected void onDestroy() {\n\n    final YourApp app = (YourApp) getApplicationContext();\n    if (app != null && isFinishing()) {\n        app.finalizeAppResources();\n    }\n\n    // ...\n\n    super.onDestroy();\n}\n
Run Code Online (Sandbox Code Playgroud)\n