У меня есть классическое приложение для Android с предварительным просмотром с камеры (общий инструмент, который можно найти во многих руководствах [маракана и т. Д.]), Которое должно делать снимки за определенный промежуток времени.Потоки и уничтожение потоков сделано, ошибки типа "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();
}
}
};
Вскоре - если я освобождаю и воссоздаю камеру в onError
обратном вызове, тогда RuntimeException
Метод, вызываемый после освобождения (takePicture), вызывается.Так стоит ли мне как-то снова назначать держатель поверхности для камеры или воссоздавать держатель поверхности?
Этого было бы достаточно, чтобы направить меня, например, на некоторые форумы, где это описано или решено, и т. Д. Спасибо за любую помощь.