我创建了一个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方法?我知道有 hiddenhideSurface()和showSurface()in SurfaceView,但我不想走这条路。