2011-06-10 9 views
6

En mi aplicación, estoy tratando de configurar la cámara. Mi clase extiende SurfaceView e implementa los métodos SurfaceHolder.Callback.Android: vista de cámara: la aplicación se bloquea cuando no utilizo un método en desuso

Aquí es un poco de mi clase:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{ 
    private SurfaceHolder mHolder; 
    private Camera.Parameters cameraParameters; 
    private Camera camera; 

    public CameraPreview(Context context) { 
     super(context); 
     mHolder = this.getHolder(); 
     mHolder.addCallback(this); 
     // If this is deprecated, why do I still need it? 
     // It says deprecated, but app crashes when removed. 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
     Camera.Parameters parameters = camera.getParameters(); 
     List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); 

     Camera.Size previewSize = previewSizes.get(0); 
     parameters.setPreviewSize(previewSize.width, previewSize.height); 
     camera.setParameters(parameters); 

     try { 
      camera.stopPreview(); 
      camera.setPreviewDisplay(mHolder); 
      camera.startPreview(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     camera = Camera.open(); 
     cameraParameters = camera.getParameters(); 
} 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     camera.stopPreview(); 
     camera.release(); 
     camera = null; 
    } 
} 

Mi pregunta consiste en el método "setType" en el constructor. La API afirma que el método está en desuso y se ignora. Sin embargo, si comento esa línea, la aplicación se bloquea cuando llamo a camera.startPreview(). Estoy tratando de descubrir por qué es esto. Si se ignora, entonces no debería importar lo que hice con ese método. Implica que hay algo muy incorrecto en esta implementación.

Estoy ejecutando el software Android 2.2.

Cualquier ayuda sería apreciada.

Respuesta

1

Con Android 2.2 sdk, el método setType no está en desuso porque ya lo he usado.

Puede haber cambios con otras situaciones.

(1) Compruebe que el paquete que ha importado es android.hardware.Camera. (2) Marque todos los permisos agregados en el archivo de manifiesto para la cámara.

+1

El problema parece ser que fue desaprobado bastante recientemente como se indica aquí: http://code.google.com/p/android/issues/detail?id=16639 Sería útil si la referencia en realidad, los documentos decían cuándo un método estaba en desuso en vez de simplemente cambiarlo. – DeeV

Cuestiones relacionadas