2010-04-18 7 views
9

Sto provando a impostare l'altoparlante attivo in una chiamata programmaticamente utilizzando audiomanager.setSpeakerphoneOn(true) in un servizio ma sembra che non funzioni e non so perché. Devo fare qualcos'altro?L'altoparlante impostato su Android a livello di programmazione

Grazie

+0

Una domanda simile è stato chiesto e ha risposto [qui] [1] [1]: http://stackoverflow.com/questions/8617381/turn-on-speakerphone-whenever-an-outgoing- call-made-made/21328490 # 21328490 –

risposta

13

verificare se il file manifesto disponga delle autorizzazioni devono fare questa operazione.

penso che questo sia il permesso è necessario MODIFY_AUDIO_SETTINGS

+0

Funziona! E 'stato abbastanza facile! Grazie – Matroska

4

In Android 4.1 e di più quando si effettua una chiamata al telefono spegnere il microfono automaticamente. Quindi quello che dovete fare è aggiungere l'altoparlante del ricevitore che ascolta per la chiamata viene fatta quando lo stato è "sganciato" e anche mettere un 0,5 secondi ritardato per accendere l'altoparlante del genere:

final Handler mHandler = new Handler(); 
mHandler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    audioManager.setMode(AudioManager.MODE_IN_CALL); 
    audioManager.setSpeakerphoneOn(true); 
    MainActivity.shouldTurnSpeakerOn = false; 
    MainActivity.shouldTurnSpeakerOff = true; 
    Log.d("incoming_call","speaker_on");      
    } 
}, 500); 

Ricordarsi di aggiungere questo al listener dello stato del telefono. E per far fuoriuscire il vivavoce quando lo stato è IDLE (necessario per le versioni precedenti).

Buona fortuna.

+0

Non so il motivo per cui è richiesto questo ritardo di 500 ms. Grazie! – Ishaan