我有一个像这样启动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之前将设备倾斜至纵向,则不会崩溃。我该如何解决这个问题?
答案 0 :(得分:4)
您需要覆盖onSaveInstanceState
方法以在适合旋转之前保留活动的设置。然后,在onCreate方法中,您可以检查Bundle
参数是否为null。如果没有,那么您正在重新创建活动,并应从中加载保存的设置。
答案 1 :(得分:4)
快速而肮脏的路线是自己处理方向变化。如果您的应用程序没有不同的横向和纵向布局,那么这是一条很好的选择。这是怎么回事。
在android:configChanges="orientation"
。
AndroidManifest
添加到您的活动中
您可以做的另一件事是确保您的onSaveInstanceState
持久保存相机数据和您可能正在使用的任何其他数据,以便在应用程序重新加载时,您可以在onRestoreInstanceState
中重新加载该数据。如果您共享LogCat错误,您可能会看到NullPointerException
,这是因为数据在旋转时丢失了。我把我的钱放在相机数据上。
答案 2 :(得分:0)
如果您真的不需要为您的应用程序提供横向支持,您也可以阻止活动到纵向模式,而您不必管理方向更改..您可以通过设置{{1 }}属性到你的活动。
如果你也想支持景观,那么我担心你必须看看布里格姆的回答。