android android-4.0-ice-cream-sandwich speaker

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.



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


Tratar

AudioManager.speakerphone(true);

Mira this


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(); } } });