我有经典的Android应用程序与相机预览(常见的实现,可以在许多教程[marakana等]中找到),应该在给定的时间间隔拍照.完成线程和杀死线程,"method called after release"处理错误.但有时会100发生众所周知的错误.我接受了它发生并试图处理它的事实.我实现了ErrorCallback它的onError方法,其中当前的相机对象被释放并实例化为官方文档中所写的新对象.
但是(毫不奇怪)这还不够.可能错误地分配了新相机,因为"CameraDemo has been exited unexpectedly"现在出现了一条消息.我已经阅读了许多文档和例子,希望能够解释一个适当的程序但显然没有人有这样的问题.所以我想问一下除了发布和创建新相机还有什么办法?这是代码:
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();
}
}
};
Run Code Online (Sandbox Code Playgroud)
不久 - 如果我在onError回调中释放并重新创建相机,则会RuntimeException在释放后调用Method(takePicture).那么我应该以某种方式将表面支架再次分配给相机还是重新创建表面支架?
将我引导到某些论坛,描述或解决它等等就足够了.感谢您的帮助.
小智 0
在我的应用程序中处理camer我使用这个:
public void onResume() {
super.onResume();
if(mCamera == null)
mCamera = getCameraInstance():
}
public static Camera getCameraInstance() {
mCamera = null;
try {
mCamera = Camera.open();
Parameters parameters = mCamera.getParameters();
mCamera.cancelAutoFocus();
mCamera.setPreviewCallback(yourPreviewCb);
mCamera.startPreview();
mCamera.setParameters(parameters);
mCamera.autoFocus(yourAutoFocusCB);
} catch (Exception e) {
//TODO
}
return mCamera;
}
Run Code Online (Sandbox Code Playgroud)
getCameraInstance() 中的 mCamera = null 只是为了确保根本没有相机在运行。
我认为你需要重新创建一个完整的相机,而不仅仅是用
camera.open();
Run Code Online (Sandbox Code Playgroud)
根据您的需要,在 onResume 或错误回调中设置此项。
| 归档时间: |
|
| 查看次数: |
2796 次 |
| 最近记录: |