studio programacion para libros gratis ediciĆ³n desarrollo desarrollar aprende app aplicaciones android audio

programacion - Android-Reproducir audio desde el auricular



programacion android pdf 2018 (7)

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

Luego usa STREAM_VOICE_CALL para tu MediaPlayer.

Si la llamada a setForceUse correctamente y el audio de su MediaPlayer aún se reproduce en el altavoz, diría que algo está mal en la implementación de AudioPolicyManager en el teléfono / tableta en el que está probando esto.

Me gustaría reproducir el audio de un archivo en el auricular del teléfono (o los auriculares que están conectados) utilizando el Android MediaPlayer . Intenté usar el truco MODE_IN_CALL como se sugiere en este hilo: Android: hacer que el audio se reproduzca a través del auricular, pero eso 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 tampoco ayudó.

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? Probé 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 altavoz del teléfono hasta el momento.


Descubrí que necesitaba configurar tanto el reproductor multimedia como 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);


El siguiente código funciona bien para mí y lo he probado en varios dispositivos:

1- creando instancias:

MediaPlayer mPlayer = MediaPlayer.create(MainActivity.this, R.raw.skype_call_dialing); AudioManager mAudioManager = ((AudioManager).getSystemService(Context.AUDIO_SERVICE));

2- si quieres ajustar el volumen al máximo (opcional)

int maxVolumeMusic = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolumeMusic, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); mAudioManager.setMode(AudioManager.STREAM_MUSIC);

3- configurar el audio para reproducir desde el auricular:

mAudioManager.setSpeakerphoneOn(false);

4- juego:

mPlayer.setLooping(true); mPlayer.start();

¡¡¡¡Hecho!!!! Pero hay algunos consejos que voy a compartir con ustedes:

1- en el paso 2, si configura Audiomanager.setMode () antes de AudioManager.setStreamVolume (), entonces el volumen no se ajustaría al máximo!

2- si agrega mPlayer.prepare () antes de mPlayer.setLooping (true); ¡podría provocar un fallo !, no deberías usar mPlayer.prepare () mientras que mPlayer se está inicializando así:

MediaPlayer mPlayer = MediaPlayer.create(MainActivity.this, R.raw.skype_call_dialing);

3- en el paso 2, mAudioManager.setMode () Utilicé AudioManager.STREAM_MUSIC, cuando intento otros modos, en muchos casos no pude encender y apagar el altavoz.


Ok, en mi caso, el problema se resolvió utilizando el siguiente código

mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); mAudioManager.setSpeakerphoneOn(false);


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

Juega a través del auricular

mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);

Juega a través del altavoz del teléfono

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

Eso es. Cualquier otra solución (incluida la publicada aquí -> Android - Obtener audio para que se reproduzca a través del auricular ) no funciona de manera consistente en todos los dispositivos. De hecho, el uso de MODE_IN_CALL asegura que su audio nunca se reproducirá en ciertos dispositivos.

Nota: Necesitará volver a preparar el reproductor multimedia para cambiar las transmisiones.


Solo quería agregar un ejemplo completo para la Respuesta de Deepak Bala. Funciona cuando no se usa 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(); }


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

Es necesario configurar el modo de administrador de audio también. y luego, utilizando la interfaz de usuario de audiomgr.setSpeakerphoneOn (false), puede alternar.

AudioManager audiomgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); audiomgr.setMode(AudioManager.STREAM_MUSIC); audiomgr.setSpeakerphoneOn(false);