我创建了一个自定义相机预览视图
如果我单击“从图库中选择”按钮,则会创建以下意图:
如果只有一个活动可以响应此意图,那么就没问题了。该活动会自动打开,相机被释放。当我在画廊上按下返回键时,我也可以回到
有多个活动可以处理此意图时,有趣的部分开始了,意图选择器对话框弹出。当意图选择器对话框生成时,在父活动中调用
以下问题发生是因为当对话框被提出时,只有
我的问题是,如何在取消意图选择器对话框时重新显示相机预览。是否有一种方法可以显式触发
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()
,但我不想走这条路。