我已经创建了一个自定义相机预览视图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