取消意图选择器后重新打开相机

4
我创建了一个自定义相机预览视图CameraView,它继承了SurfaceView,并实现了SurfaceHolder.Callback接口。该视图与相机一起工作。打开视图时,它显示相机预览。在同一屏幕上,还有一个叠加层,其中包含两个按钮:“拍照”和“从图库中选择”。持有CameraView的活动在onPause()onResume()方法中释放并重新打开相机。
如果我单击“从图库中选择”按钮,则会创建以下意图:
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, LOAD_PICTURE);

如果只有一个活动可以响应此意图,那么就没问题了。该活动会自动打开,相机被释放。当我在画廊上按下返回键时,我也可以回到CameraView活动,并恢复相机预览。
有多个活动可以处理此意图时,有趣的部分开始了,意图选择器对话框弹出。当意图选择器对话框生成时,在父活动中调用onPause()并释放相机,屏幕变黑。如果我不从对话框中选择意图,而是单击手机上的返回按钮,则会调用onResume(),但相机预览永远不会回来。要使相机预览再次显示,我需要回到上一个活动并重新进入预览活动。
以下问题发生是因为当对话框被提出时,只有onPause()被调用,但如果我实际上切换到不同的活动,surfaceDestroyed()也被调用。同样,当使用返回按钮取消对话框时,onResume()不会调用surfaceChanged()surfaceCreated()
我的问题是,如何在取消意图选择器对话框时重新显示相机预览。是否有一种方法可以显式触发SurfaceHolder.Callback方法? 我知道SurfaceView中有隐藏的hideSurface()showSurface(),但我不想走这条路。

你尝试过在onStop()方法中释放相机吗?同样地,在onStart()中你可以打开/重新打开相机预览。 - Houf
1个回答

0

没错,你已经在onStart方法中打开了相机,并在activity的onStop方法中释放了它。onResume和onPause方法是android activity可见生命周期的一部分。当另一个activity占据整个可见空间时,会调用onStop方法。即使其他activity不占据整个可见空间,例如当意图选择对话框弹出时,onPause也会被调用。因此,我想将相机创建和释放移动到正确的生命周期方法中应该可以解决问题。 你可以在这里找到有关activity生命周期的更多信息,但我相信你已经熟悉了:

http://developer.android.com/reference/android/app/Activity.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接