vez usar suenan soundabout sonido simultáneamente salida parlantes parlante los frontal entre configurar como cambiar auriculares audífonos altavoz altavoces activar android

android - suenan - soundabout como usar



¿Hay alguna forma de forzar el audio a través de los altavoces cuando los auriculares están conectados? (4)

Gracias a algunos comentarios aquí, y después de algunas búsquedas, finalmente descubrí cómo hacer esto.

Mi código de abajo se llama cuando presiono un botón. Configura el audio para activar los altavoces mientras llama, luego llama al número.

Preste atención a los comentarios en mi código con respecto a los permisos.

buttonRep.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //1) we need to detect once the call has been established //Note : this requires READ_PHONE_STATE permission in your manifest final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); tm.listen(new PhoneStateListener() { @SuppressWarnings("unused") @Override public void onCallStateChanged (int state, String incomingNumber) { if(state == TelephonyManager.CALL_STATE_OFFHOOK) //Here we are { //2) we switch sound to speakers //Note : this requires MODIFY_AUDIO_SETTINGS permission in your manifest AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); am.setMode(AudioManager.MODE_IN_CALL); am.setSpeakerphoneOn(true); int i = state; //3) we don''t need this call listener anymore so we "destroy it" tm.listen(this, PhoneStateListener.LISTEN_NONE); } } } , PhoneStateListener.LISTEN_CALL_STATE); //4) we are ready to place our call now //Note : this requires CALL_PHONE permission in your manifest Intent action = new Intent(); action.setAction(Intent.ACTION_CALL); action.setData(Uri.parse("tel:660")); //660 is my answering-machine number :) MainActivity.this.startActivity(action); } });

He probado lo recomendado

setSpeakerphoneOn(true)

y el no recomendado

AudioSystem.setForceUse(AudioSystem.FOR_MEDIA, AudioSystem.FORCE_SPEAKER);

pero ninguno ha funcionado.

He intentado

setWiredHeadsetOn(false)

pero eso tampoco funciona, y está en desuso.

Curiosamente,

isSpeakerphoneOn()

informes de verdad, al igual que

isWiredHeadsetOn()

Además, se establece el siguiente permiso

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />


Intenta hacer esto:

AudioManager manager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); if(manager.isWiredHeadsetOn()) { manager.setWiredHeadsetOn(false); manager.setSpeakerphoneOn(true); manager.setRouting(AudioManager.MODE_CURRENT, AudioManager.ROUTE_SPEAKER, AudioManager.ROUTE_ALL); manager.setMode(AudioManager.MODE_CURRENT); }

Necesitará este permiso:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />


La respuesta resultó ser la siguiente, con consejos de Android: conseguir que el audio se reproduzca a través del auricular

audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(true);

Ignore setRouting, no hace nada en APK> 10. Ignore los comentarios sobre setMode. Ignora los comentarios sobre setWiredHeadsetOn. Asegúrate de tener permisos MODIFY_AUDIO.


Prueba esto:

AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); IntentFilter iFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); Intent iStatus = getApplicationContext().registerReceiver(null, iFilter); boolean isHeadsetOn = false; if (iStatus != null) { isHeadsetOn = iStatus.getIntExtra("state", 0) == 1; } if(mAudioManager.isWiredHeadsetOn() || isHeadsetOn) { //When headphones are plugged mAudioManager.setMode(AudioManager.MODE_CURRENT); mAudioManager.setSpeakerphoneOn(true); }else { //When headphones are not plugged mAudioManager.setMode(AudioManager.MODE_IN_CALL); mAudioManager.setSpeakerphoneOn(true); }