从Camera Intent回来会导致Activity崩溃

时间:2012-02-04 18:54:33

标签: android android-intent android-camera

我有一个像这样启动Camera Intent的Activity(没什么特别的):

    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    File photo = new File(Environment.getExternalStorageDirectory(),  filename);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
    Uri imageUri = Uri.fromFile(photo);
    startActivityForResult(intent, CAMERA_REQUEST);

比我在onActivityResult()得到结果并将位图设置为ImageView。再一次,没什么特别的。

问题是相机应用程序始终处于横向状态。因此,如果用户将设备保持在水平方向,当他们点击“确定”将其发送回我的“活动”,并且我的“活动”之前处于纵向状态,那么它会导致我的活动崩溃,因为它必须重建它。如果在点按相机中的OK之前将设备倾斜至纵向,则不会崩溃。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

您需要覆盖onSaveInstanceState方法以在适合旋转之前保留活动的设置。然后,在onCreate方法中,您可以检查Bundle参数是否为null。如果没有,那么您正在重新创建活动,并应从中加载保存的设置。

答案 1 :(得分:4)

快速而肮脏的路线是自己处理方向变化。如果您的应用程序没有不同的横向和纵向布局,那么这是一条很好的选择。这是怎么回事。

android:configChanges="orientation"

中将AndroidManifest添加到您的活动中

您可以做的另一件事是确保您的onSaveInstanceState持久保存相机数据和您可能正在使用的任何其他数据,以便在应用程序重新加载时,您可以在onRestoreInstanceState中重新加载该数据。如果您共享LogCat错误,您可能会看到NullPointerException,这是因为数据在旋转时丢失了。我把我的钱放在相机数据上。

答案 2 :(得分:0)

如果您真的不需要为您的应用程序提供横向支持,您也可以阻止活动到纵向模式,而您不必管理方向更改..您可以通过设置{{1 }}属性到你的活动。

如果你也想支持景观,那么我担心你必须看看布里格姆的回答。