Android: reproducir audio desde el auricular

Me gustaría reproducir audio de un archivo en el auricular del teléfono (o auriculares de que está conectado) con el androide MediaPlayer . Traté de usar el hack MODE_IN_CALL como se sugiere en este hilo – Android – Obtención de audio para reproducir a través de auricular, pero que no ayudó. La aplicación también tiene el permiso android.permission.MODIFY_AUDIO_SETTINGS , pero cualquier llamada a m_amAudioManager.setSpeakerphoneOn(false); Se ignora.

 private AudioManager m_amAudioManager; m_amAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); m_amAudioManager.setSpeakerphoneOn(false); 

Una llamada a setMode(AudioManager.STREAM_VOICE_CALL); En el MediaPlayer no ayuda tampoco.

 mediaPlayer.reset(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); mediaPlayer.setDataSource(path); mediaPlayer.prepare(); 

¿Ha cambiado algo desde android 2.3 para romper este código? He probado el código en Android ICS sin ningún éxito. Alguien me puede apuntar en la dirección correcta ? El audio siempre se reproduce desde el teléfono de altavoz hasta el momento.

Resulta que la forma correcta de hacerlo es a través del siguiente código.

Juega a través de la pieza de oído

 mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 

Reproducir a través del altavoz

 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

Eso es. Cualquier otra solución (incluida la que se ha publicado aquí -> Android – Obtención de audio para reproducir a través del auricular ) no funciona de forma coherente entre dispositivos. De hecho, utilizando MODE_IN_CALL se asegura de que el audio nunca se reproduzca en ciertos dispositivos.

Nota: Deberá volver a preparar el reproductor multimedia para cambiar los flujos.

Sólo quería añadir un ejemplo completo de la respuesta de Deepak Bala. Funciona cuando no utiliza el método MediaPlayer.create ():

  this.player = new MediaPlayer(); this.player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); try { this.player.setDataSource(getContext(), Uri.fromFile(new File(m.localFileUrl))); this.player.prepare(); } catch (IllegalStateException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 

¿Qué tal esto entonces:

 // Make sure that streams following the PHONE routing strategy aren't forced // to play in the speaker. Class audioSystemClass = Class.forName("android.media.AudioSystem"); Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class); // First 0 == FOR_COMMUNICATION, second 0 == FORCE_NONE. setForceUse.invoke(null, 0, 0); 

A continuación, utilice STREAM_VOICE_CALL para su MediaPlayer.

Si la llamada setForceUse tiene éxito y el audio de su MediaPlayer sigue reproduciéndose en el altavoz, entonces diría que algo está desordenado en la implementación de AudioPolicyManager en el teléfono / tablet en el que está probando esto.

Encontré que necesitaba fijar el mediaplayer y el Audiomanager

 private MediaPlayer mp = new MediaPlayer(); AudioManager mAudioManager = (AudioManager) v.getContext() .getSystemService(Context.AUDIO_SERVICE); mAudioManager.setSpeakerphoneOn(false); mp.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 

Este método está funcionando bien para mí.

También debe configurar el modo de administrador de audio. Y luego utilizando audiomgr.setSpeakerphoneOn (falso) api puede alternar.

 AudioManager audiomgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); audiomgr.setMode(AudioManager.STREAM_MUSIC); audiomgr.setSpeakerphoneOn(false); 
  • ¿Cómo activar la vibración en la entrada de sonido?
  • Android: Cómo detener el servicio de música de mi aplicación, si otra aplicación reproduce música.
  • Combinar una imagen en un archivo de audio y hacer un archivo de vídeo en android mediante programación
  • Grabación y almacenamiento de audio en Android
  • TextToSpeech versión de compilación android no reproduce audio
  • Android Sonido: seekTo y setPlaybackRate
  • Reproducir sonido a un auricular y grabar desde el micrófono del altavoz
  • Cómo mostrar el control de volumen del sistema Android mediante programación
  • Android VideoView: no debe silenciar el audio de otras aplicaciones
  • Reproducir sonido con SoundPool
  • ¿Cómo implementar un reproductor de audio para Android usando MediaPlayer y MediaController?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.