Camera.setPreviewDisplay () выбрасывает исключение

Возможный дубликат:
Камера Android не работает. StartPreview не работает

Я пытаюсь установить предварительный просмотр камеры в пользовательском SurfaceView, но получаю исключение при каждом запуске метода инициализации.

Ниже приведен код инициализации предварительного просмотра камеры:

private void init(Context context) { setFocusable(true); mRecording = false; fileRW = new FileReaderWriter(); frameCount = 0; if(mCamera == null) { mCamera = Camera.open(); } Parameters parameters = mCamera.getParameters(); parameters.setPictureFormat(PixelFormat.JPEG); mCamera.setParameters(parameters); try { mCamera.setPreviewDisplay(surfaceHolder); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mCamera.startPreview(); } 

Строка mCamera.setPreviewDisplay(surfaceHolder); setPreviewDisplay failed исключение ( setPreviewDisplay failed ) каждый раз, когда я пытаюсь выполнить метод.

Кто-нибудь знает, что может быть неправильным? Я бы очень признателен за вашу помощь.

Спасибо! `

Я полностью согласен с Джоном Ярком

Я не мог понять, что происходит в течение недели, я проигнорировал setType на держателе поверхности, потому что SDK сказал, что он устарел, т.е.

«Этот метод устарел, это игнорируется, это значение устанавливается автоматически, когда это необходимо».

Но если вы этого не сделаете, это сработает на setPreview. Это работает 1.5 SDK (мне нужно, чтобы он был обратно совместим с этим) на Galaxy S с 2.1. Поэтому убедитесь, что вы установили тип. Не совсем так же, как и в документации, это звучит.

Лучшее место для вызова setPreviewDisplay() находится в surfaceChanged () Если поверхность только что создана, функция surfaceChanged будет вызываться по крайней мере один раз, и вы можете startPreview() и setPreviewDisplay там. Если поверхность изменяется и предварительный просмотр уже stopPreview/setPreviewDisplay/startPreview , вы можете stopPreview/setPreviewDisplay/startPreview . Даже если ваше приложение не изменит размер поверхности, фреймворк может неожиданно вызвать surfaceChanged() когда приложение запускается или выходит из-за изменений ориентации. Таким образом, ваше приложение действительно должно правильно обрабатывать surfaceChanged. Вы можете проследить исходный код приложения камеры в Android для справки.

Фрагмент кода в другом ответе работает, если surfaceChanged() вызывается только один раз в жизненном цикле приложения.

Intereting Posts
Google+ Войти с Play Services 6.5.87 (GoogleApiClient) – Android Центр Горизонтальная последняя строка с использованием диапазона Recycler GridLayoutManager Как скрыть прогресс в Android? Изменить андроид: enabled = "true" программно Получить GPS-местоположение в широковещательном приемнике / или услуге для передачи данных приемника Broadcast Android mock location без настройки определения местоположения (корневое устройство) Диалоговое окно «Применить» Android DDMS уже установлена, поэтому будет выполнено обновление Путаница с селектором «наименьшей ширины 600 дп» Изменение навигации Просмотр цвета элемента Динамически Android Данные фрагмента идут нулевыми, если загружен другой фрагмент Мягкая клавиатура не отображается при запуске Activity Ошибка синхронизации Gradle в студии Android при импорте проекта Есть ли способ запустить определенный набор тестов в проекте Android Gradle? Доля Facebook – Отсутствующие тексты