Camera.setPreviewDisplay () lança excepção

votos
4

Duplicate possíveis:
Camera Android não vai funcionar. startPreview falhar

Estou tentando definir uma visualização da câmera em um SurfaceView costume, mas eu recebo uma exceção cada vez que eu executar o método de inicialização.

Abaixo está o código para a inicialização de visualização da câmera:

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

}

a linha mCamera.setPreviewDisplay(surfaceHolder);inicia uma excepção ( setPreviewDisplay failed) cada vez que tentar executar o método.

Alguém sabe o que poderia estar errado? Eu realmente aprecio qualquer de sua ajuda.

Thanks! `

Publicado 26/06/2009 em 12:58
fonte usuário
Em outras línguas...                            


2 respostas

votos
7

Concordo plenamente com Jon brilhante

Eu não conseguia descobrir o que estava acontecendo por uma semana, eu ignorei o setType no suporte da superfície porque o SDK disse que estava obsoleta, ie.

"Este método está obsoleto. Isso é ignorado, esse valor é definido automaticamente quando necessário."

Mas se você não fizer isso, ele irá travar em setPreview. Isto está em execução 1.5 SDK (eu preciso dele para ser compatível para isso) em um Galaxy S com 2,1. Portanto, certifique-se de definir o tipo. Não é tão automático como a documentação faz parecer.

Respondeu 09/04/2011 em 09:44
fonte usuário

votos
2

O melhor lugar para chamar setPreviewDisplay()está em surfaceChanged () Se a superfície é apenas criado, surfaceChanged será chamado pelo menos uma vez e você pode startPreview()e setPreviewDisplay lá. Se as mudanças de superfície e de visualização já começa, você pode stopPreview/setPreviewDisplay/startPreviewlá. Mesmo se a sua aplicação não muda o tamanho da superfície, o quadro ainda pode inesperadamente chamar surfaceChanged()quando o aplicativo inicia ou sai devido a mudanças de orientação. Portanto, o seu aplicativo realmente precisa lidar com surfaceChanged corretamente. Você pode rastrear o código-fonte do aplicativo da câmera no Android para referência.

O trecho de código em outra resposta funciona se surfaceChanged()só é chamado uma vez no ciclo de vida do aplicativo.

Respondeu 30/11/2009 em 07:46
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more