从 Camera Intent 返回会导致 Activity 崩溃

koo*_*ng3 2 android android-intent android-camera

我有一个像这样启动相机意图的活动(没什么特别的):

    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);
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*ham 5

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


Spi*_*idy 5

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

添加android:configChanges="orientation"到您的 Activity 中AndroidManifest

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