cómo activar/desactivar el altavoz programáticamente en Android 4.0
android-4.0-ice-cream-sandwich speaker (8)
Reproduco un archivo a través del reproductor de medios y quiero dar opciones como el encendido / apagado del altavoz, 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 encender / apagar el altavoz mediante programación y a tocar con los 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);
PS: He otorgado este permiso en el manifiesto: permiso de android.permission.MODIFY_AUDIO_SETTINGS
Algo como esto podría funcionar en algunos dispositivos (solo lo 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
solo se usa internamente para enrutar el audio de la radio FM al altavoz (ya que la radio FM requiere que tenga un auricular / audífonos conectados para que funcione 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.
Problema resuelto. Para todos ustedes que todavía están buscando la respuesta. Bueno, esto no es un error, sino una cosa difícil. Necesitas usar el PhoneStateListener
Usando esta guía: http://danielthat.blogspot.co.il/2013/06/android-make-phone-call-with-speaker-on.html
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);
Puede adquirir un altavoz trasero o un auricular frontal a la vez.
Si no hay accesorios conectados;
Use audioManager.setMode(AudioManager.MODE_IN_CALL);
& audioManager.setSpeakerphoneOn(false);
para utilizar el altavoz frontal / auricular. Pero esto reproduciría el audio en el auricular, no en el altavoz. Para usar el altavoz trasero, use audioManager.setMode(AudioManager.MODE_NORMAL);
& audioManager.setSpeakerphoneOn(true);
Si accesorio conectado; Use audioManager.setMode (AudioManager.MODE_IN_CALL); & audioManager.setSpeakerphoneOn (falso); para utilizar el altavoz frontal / auricular. Pero esto reproduciría el 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)
false
para enrutar el audio a través del auricular. Y configúrelo como true
para enrutar el audio en consecuencia.
Si solo desea abrir su altavoz en u, 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);
intente 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, lo probé en Android 7.0 (Redmi 4x) y funcionó bien.
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();
}
}
});