2013-01-18 18 views
7

Sto utilizzando AudioTrack per riprodurre l'audio che ricevo tramite socket UDP. Ho un sacco di rumore insieme al suono, quindi ho deciso di usare AudioManager. Ma AudioManager cambia il routing del suono oltre i limiti dell'applicazione. Di seguito è riportato il codice che sto usando.Utilizzare AudioTrack con AudioManager setSpeakerphoneOn

 m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); 
     m_amAudioManager.setSpeakerphoneOn(false); 

Il problema con questo codice è che quando chiudo l'applicazione e iniziare un lettore musicale, il suono proviene dal diffusore anteriore e non l'altoparlante posteriore ususal e non posso cambiarlo in qualche modo. Per risolvere questo problema ho deciso di aggiungere la seguente riga quando chiudo la mia app.

m_amAudioManager.setSpeakerphoneOn(true); 

Ma con questa linea il problema è che quando ricevo una chiamata (chiamata normale), per impostazione predefinita l'altoparlante è acceso. Ho davvero bisogno di aiuto su questo per favore.

risposta

12

Per prima cosa è necessario dichiarare l'autorizzazione dell'utente MODIFY_AUDIO_SETTINGS in manifest per modificare le impostazioni di AudioManager.

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
  1. Prima di modificare le impostazioni, è necessario salvare le impostazioni audio manager attuali!

    oldAudioMode = audioManager.getMode(); 
    oldRingerMode = audioManager.getRingerMode(); 
    isSpeakerPhoneOn = audioManager.isSpeakerphoneOn(); 
    
  2. applicare le impostazioni audio (esempio)

    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    audioManager.setMode(AudioManager.MODE_NORMAL); 
    audioManager.setSpeakerphoneOn(true); 
    
  3. Poi sulla finitura, ripristinare le impostazioni

    audioManager.setSpeakerphoneOn(isSpeakerPhoneOn); 
    audioManager.setMode(oldAudioMode); 
    audioManager.setRingerMode(oldRingerMode); 
    
+0

Grazie mille per la risposta. Ho usato questa autorizzazione. E ha risolto uno dei miei problemi. L'altoparlante non è più attivo per impostazione predefinita. Ma con questo codice ho provato a eseguire il lettore musicale e ha iniziato a funzionare sul diffusore anteriore. Qualche idea su come cambiarlo di default? – SoH

+0

Il valore predefinito è quello impostato dall'utente del Dispositivo prima che inizi l'app. Il punto è ripristinare l'impostazione AudioManager allo stato in cui si trovava prima di modificarlo. Pertanto, se speakerPhone è disattivato prima dell'avvio dell'app, si spegne quando l'app si arresta. – TouchBoarder

+0

@hsigmond va bene se cambiamo modalità dopo l'avvio di AudioTrack? – onmyway133

1

Impostare questa quando si chiude l'applicazione.

m_amAudioManager.setMode (AudioManager.MODE_NORMAL);