Camera.setPreviewDisplay () создает исключение [дубликат]

Возможное дублирование:
Android Camera не будет работать. startPreview не удается

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

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

<code>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();

}
</code>

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

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

Thanks!

 Syndacate17 февр. 2013 г., 05:55
Нет, Джонатан, это не повторяющаяся проблема. Одна из них была вызвана неправильными параметрами ширины / высоты, другая - несоответствиями API при настройке типа.

Ответы на вопрос(2)

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

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

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

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

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

Ваш ответ на вопрос