我有一个经典的Android应用程序,其中包括相机预览(常见实现可以在许多教程中找到[例如 marakana]),旨在在给定时间间隔内拍摄照片。线程处理和终止线程等操作已完成,例如处理“方法在释放后调用”的错误。但有时会出现众所周知的错误100。我接受了它发生的事实,并尝试着对其进行处理。我实现了ErrorCallback及其onError方法,其中当前相机对象被释放并按照官方文档的指示重新实例化了一个新的相机。
但是(并不奇怪)这还不够。新相机可能分配错误,因为现在会出现消息“CameraDemo意外退出”的情况。我阅读了许多文档和示例,希望能够找到适当的解决方法,但显然没有人遇到过这样的问题。所以我想问除了释放和创建新相机之外,我还应该做些什么?以下是代码:
ErrorCallback CEC = new ErrorCallback()
{
public void onError(int error, Camera camera)
{
Log.d("CameraDemo", "camera error detected");
if(error == Camera.CAMERA_ERROR_SERVER_DIED)
{
Log.d("CameraDemo", "attempting to reinstantiate new camera");
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release(); //written in documentation...
camera = null;
camera = Camera.open();
}
}
};
简单来说,如果我在onError
回调中释放并重新创建相机,则会引发RuntimeException
方法在释放后被调用(takePicture)。所以我应该如何再次将表面持有者分配给相机或重新创建表面持有者呢?
如果您能直接指导我到一些论坛上,其中描述或解决了这个问题,那就足够了。谢谢任何帮助。