2011-12-23 17 views
6

Mi requisito es encender el altavoz cada vez que se inicia una llamada. Probé el siguiente código, pero no está funcionando. De hecho, el altavoz se enciende cuando está en medio de una llamada, ¡y llega una segunda llamada!Encienda el altavoz cuando se realice una llamada saliente

package in.co.allsolutions; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
//import android.view.View; 
import android.widget.Toast; 
import android.media.AudioManager; 

public class MyTelephonyBroadcastReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 

      AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
      audioManager.setSpeakerphoneOn(true); 
      Bundle extras = intent.getExtras();    
      if (extras != null) { 

        String state = extras.getString(TelephonyManager.EXTRA_STATE); 
        Log.i("AS", "Message Received. State = " + state + ", Mode = " + audioManager.getMode()); 
        //audioManager.setMode(AudioManager.MODE_NORMAL); 
        //audioManager.setSpeakerphoneOn(true); 
//     if (state.equals("OFFHOOK")) 
//     {     
        //audioManager.setMode(AudioManager.MODE_CURRENT); 
        //audioManager.setSpeakerphoneOn(true); 
        //audioManager.setMode(AudioManager.MODE_IN_CALL); 
        //audioManager.setSpeakerphoneOn(true); 
        //audioManager.setMode(AudioManager.MODE_RINGTONE); 
        //audioManager.setSpeakerphoneOn(true); 
        if (audioManager.isSpeakerphoneOn()) { 
         Log.i("AS", "Speaker on - SUCCESS."); 
        } else { 
         Log.i("AS", "Speaker could not be turned on."); 
        } 
//     } 
      } else { 
        Toast.makeText(context, "Message Received without any state", Toast.LENGTH_LONG).show(); 
      } 
     } 
} 

Gracias.

+0

Encontré una pregunta similar aquí, que tampoco fue respondida: http://www.anddev.org/novice-tutorials-f8/how-to-programmatically-turn-on-loudspeaker-when-make-receiv- t49421.html. ¿Es un error en Android? – AllSolutions

+0

Ver mi respuesta aquí: http://stackoverflow.com/a/25346769/2826409 –

Respuesta

5

Una pregunta similar se preguntó y respondió here.

Creo que la respuesta puede estar en AndroidManifest.xml de su proyecto. Intente agregar:

uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" 

a su manifestación, lo que permitirá a su aplicación modificar la configuración de audio del dispositivo.
También tendrá que cambiar su modo de Audiomanager a MODE_IN_CALL:

audioManager.setMode(AudioManager.MODE_IN_CALL) 
9

Se puede establecer mediante programación a través de la siguiente manera:

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

Pero, tenga en cuenta que no se olvidó de juego de altavoces cuando detener la llamada:

audioManager.setSpeakerphoneOn(false); 

Y, conjunto de permisos en el manifiesto:

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

Este código funciona bien para mí. Espero que sea útil para usted.

+0

Gracias. En Kitkat 4.4.2 el permiso RECORD_AUDIO no es necesario, no puedo decirlo para otras versiones de Android. –

Cuestiones relacionadas