cómo activar / desactivar el altavoz mediante progtwigción en Android 4.0

Reproduzco un archivo a través del reproductor de medios y quiero dar opciones como el altavoz encendido / apagado, reproducir a través de auriculares, bluetooth, etc. Probé el siguiente código que funciona bien para Android 2.2 pero quiero algo que también funcione para 2.2 y 4.0. ¿Puede ayudarme a activar o desactivar el altavoz de forma programática y reproducirlo a través de auriculares?

AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); if(isOn){ audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setMode(AudioManager.MODE_NORMAL); }else{ //Seems that this back and forth somehow resets the audio channel audioManager.setMode(AudioManager.MODE_NORMAL); audioManager.setMode(AudioManager.MODE_IN_CALL); } audioManager.setSpeakerphoneOn(isOn); 

PD: he dado este permiso en manifiesto: permiso android.permission.MODIFY_AUDIO_SETTINGS

Algo como esto podría funcionar en algunos dispositivos (solo he probado en una XPeria P):

 final static int FOR_MEDIA = 1; final static int FORCE_NONE = 0; final static int FORCE_SPEAKER = 1; Class audioSystemClass = Class.forName("android.media.AudioSystem"); Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class); setForceUse.invoke(null, FOR_MEDIA, FORCE_SPEAKER); // To get back to the default behaviour, use the combination FOR_MEDIA,FORCE_NONE. 

La combinación FOR_MEDIA, FORCE_SPEAKER generalmente solo se usa internamente para enrutar el audio de la radio FM al altavoz (ya que la radio FM requiere que tenga un auricular con cable / auriculares enchufados para que actúe como una antena). Los dispositivos que no tienen la funcionalidad de radio FM (o utilizan una implementación alternativa) pueden ignorar esta combinación de parámetros, por lo que este método no funcionaría en dicho dispositivo.

 AudioManager mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); Button mVolumeButton = (Button)findViewById(R.id.btn_Volume); mVolumeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(mAudioMgr.isWiredHeadsetOn()){ mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE); mAudioMgr.setWiredHeadsetOn(false); mAudioMgr.setSpeakerphoneOn(true); mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION); Toast.makeText(getApplicationContext(), "SpeakerPhone On", Toast.LENGTH_LONG).show(); }else{ mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION); mAudioMgr.setSpeakerphoneOn(false); mAudioMgr.setWiredHeadsetOn(true); Toast.makeText(getApplicationContext(), "Wired Headset On", Toast.LENGTH_LONG).show(); } } }); 

Puede adquirir un altavoz trasero o un auricular delantero a tiempo.

Si no hay accesorios conectados;

Use audioManager.setMode(AudioManager.MODE_IN_CALL); & audioManager.setSpeakerphoneOn(false); para usar el parlante / auricular delantero. Pero esto reproduciría audio en el auricular, no en el altavoz. Para usar el altavoz trasero, use audioManager.setMode(AudioManager.MODE_NORMAL); & audioManager.setSpeakerphoneOn(true);

Si el accesorio está conectado; Use audioManager.setMode (AudioManager.MODE_IN_CALL); & audioManager.setSpeakerphoneOn (falso); para usar el parlante / auricular delantero. Pero esto reproduciría audio en el auricular, no en el altavoz. Para usar el altavoz trasero, use audioManager.setMode(AudioManager.MODE_IN_CALL); & audioManager.setSpeakerphoneOn(true);

Nota: Asegúrese de que audioManager.setWiredHeadsetOn(boolean on) y audioManager.setBluetoothScoOn(boolean on) audioManager.setWiredHeadsetOn(boolean on) audioManager.setBluetoothScoOn(boolean on) configurado en false para enrutar el audio a través del auricular. Y establezca en true para enrutar el audio en consecuencia.

Problema resuelto. Para todos ustedes que todavía están buscando la respuesta. Bueno, esto no es un error, sino algo complicado. Necesita usar PhoneStateListener

Usando esta guía: http://danielthat.blogspot.co.il/2013/06/android-make-phone-call-with-speaker-on.html

si solo desea abrir su altavoz en el teléfono, simplemente escriba esta línea en oncreate () de su actividad.

 static AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(true); 

Prueba esto.

 AudioManager audioManager =(AudioManager)getSystemService(Context.AUDIO_SERVICE); if (isOn) { isOn = false; audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setMode(AudioManager.MODE_NORMAL); } else { isOn = true; audioManager.setMode(AudioManager.MODE_NORMAL); audioManager.setMode(AudioManager.MODE_IN_CALL); } audioManager.setSpeakerphoneOn(isOn); 

intenta seguir el fragmento de código:

 //for spearphone on audioManager.setMode(AudioManager.MODE_NORMAL); audioManager.setSpeakerphoneOn(true); //for headphone on audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); audioManager.setSpeakerphoneOn(false); 

Por cierto, probé en Android 7.0 (Redmi 4x) y funcionó bien.

Tratar

 AudioManager.speakerphone(true); 

Mira esto .

Intereting Posts