我见过类似的问题,但与我读过的关于这个问题的线程相比,我的代码结构完全不同。
我的问题是当我尝试设置MediaRecorder的previewDisplay
时mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
我得到IOException“无效的预览表面”
Log.v(TAG, mSurfaceHolder.getSurface().toString()
给出“Surface(name = null)/ @ 0x42333f90”所以我认为表面是否以某种方式为空?
我正在努力将这款相机录制成一项服务,让我不确定我的表面和表面光洁度应该是什么。
目前,RecorderService.class的onCreate()是:
SurfaceView view = new SurfaceView(getActivity());
mSurfaceHolder = view.getHolder();
其中getActivity()
返回启动服务的活动。
相机启动时间:
Log.v(TAG, "Starting camera");
Intent intent = new Intent(getActivity(), CameraRecorder.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getActivity().startActivity(intent);
因此,当我尝试停止录制时,由于IllegalStateException,应用程序在mMediaRecorder.stop()
崩溃。
总结一下:
如果需要,我可以提供更多代码。
提前致谢!
答案 0 :(得分:1)
我设法通过创建一个新的活动CameraRecorder.java来解决这个问题,该活动的唯一目的是启动服务。在CameraRecorder的布局xml文件中,我添加了一个用于预览的SurfaceView。因为我在启动服务时在CameraRecorder.java中运行了finish(),所以屏幕上看不到预览!
答案 1 :(得分:1)
我使用java.io.IOException: invalid preview surface
修复了SurfaceHolder.Callback
。在调用回调方法surfaceCreated()
之前,您无法使用预览曲面。一个人必须使用像
mSurfaceView.getHolder().addCallback(mSurfaceHolderCallback);
答案 2 :(得分:0)
我已经在scanf
中进行了这样的初始化:
atoi
并使相机准备在服务本身的oncreate()
中发生错误。
我希望这是同样的问题。无法实现上述代码。