2012-06-05 10 views
19

Estoy usando el método takePicture() de la clase Camera. Toma la foto, pero no hace ningún sonido! Mi cliente quiere el sonido de clic predeterminado que hace Android.Android: takePicture() no hace ruido

He visto otros hilos y parece que el problema está en deshabilitar el sonido, ¡no al revés! ¿Por qué mi aplicación no está emitiendo el clic?

Respuesta

51

También tuve este problema. Lo resuelto mediante el uso de código siguiente: El siguiente se utiliza para llamar takePicture:

clickButton.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(final View view) { 
       mCamera.takePicture(shutterCallback, null, onPicTaken); 
      } 
     }); 

Ahora shutteerCallBack:

private final ShutterCallback shutterCallback = new ShutterCallback() { 
     public void onShutter() { 
      AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
      mgr.playSoundEffect(AudioManager.FLAG_PLAY_SOUND); 
     } 
    }; 

Ahora Haga lo que después de tomar la imagen de la cámara:

 /** 
    * This will be called after taking picture from camera. 
    */ 
    final transient private PictureCallback onPicTaken = new PictureCallback() { 
     /** 
     * After taking picture, onPictureTaken() will be called where image 
     * will be saved. 
     * 
     */ 
     @Override 
     public void onPictureTaken(final byte[] data, final Camera camera) { 
     } 

Esto reproducirá el sonido al hacer clic en el botón de captura.

Gracias :)

+0

Wow !!!! ¡¡Salvaste mi día Shrikant !! ¡¡Funcionó!! = D ¡Muchas gracias! =) Solo una pregunta más. Estoy usando el Galaxy Tab 10.1 y el sonido que produce en mi aplicación no es el mismo que el de la aplicación de cámara predeterminada en la tableta. ¿Crees que Samsumg podría haber personalizado el sonido para su aplicación de cámara original? – Tiago

+0

Sí, podría ser, pero hablando en serio, no estoy muy seguro al respecto. – Shrikant

+0

De nada :) – Shrikant

17

Si quieres una cámara para reproducir el sonido por defecto de Android, tienes que darle una devolución de llamada de obturación vacío.

ShutterCallback shutterCallback = new ShutterCallback() { 
    @Override 
    public void onShutter() { 
     /* Empty Callbacks play a sound! */ 
    } 
}; 

mCamera.takePicture(shutterCallback , null, onPicTaken); 

Probado en HTC One SV y Samsung Galaxy Xcover 2.

le dará la devolución de llamada de una llamada de retorno del obturador vacío y luego se reproduce el sonido predeterminado.

Si llama al takePicture con un nulo ShutterCallback, la cámara no reproducirá ningún sonido.

La respuesta de Shrikant está funcionando, pero podría comportarse inesperadamente, ya que mgr.playSoundEffect(); no está destinado a ser llamado con AudioManager.FLAG_PLAY_SOUND como estados the doc.

+0

Funcionó para mí. Gracias @HOLLO – Ahsanwarsi

-1

Uso MediaPlayer() clase cuando se toma la imagen