2013-01-18 27 views
7

Używam AudioTrack do odtwarzania dźwięku, który odbieram przez gniazda UDP. Z dźwięku wydobywa się dużo hałasu, więc zdecydowałem się użyć AudioManager. Ale AudioManager zmienia routing dźwięku poza granice aplikacji. Poniżej znajduje się kod, którego używam.Użyj AudioTrack z zestawem AudioManager Telekonferencja

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

Problem z tym kodem jest, że kiedy zamknąć aplikację i uruchomić odtwarzacz muzyczny, dźwięk pochodzi z przedniego głośnika a nie ususal tyłu głośnika i nie mogę zmienić go jakoś. Aby rozwiązać ten problem, postanowiłem dodać następujący wiersz podczas zamykania aplikacji.

m_amAudioManager.setSpeakerphoneOn(true); 

Ale z tą linią problem polega na tym, że kiedy odbieram połączenie (normalne połączenie), domyślnie głośnik jest włączony. Naprawdę potrzebuję pomocy w tym zakresie.

Odpowiedz

12

Najpierw musisz zadeklarować w swoim manifeście uprawnienia użytkownika MODIFY_AUDIO_SETTINGS, aby zmienić ustawienia menedżera AudioManager.

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
  1. Przed zmianą jakichkolwiek ustawień, należy zapisać bieżące ustawienia Audiomanager!

    oldAudioMode = audioManager.getMode(); 
    oldRingerMode = audioManager.getRingerMode(); 
    isSpeakerPhoneOn = audioManager.isSpeakerphoneOn(); 
    
  2. zastosować ustawienia audio (przykład)

    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    audioManager.setMode(AudioManager.MODE_NORMAL); 
    audioManager.setSpeakerphoneOn(true); 
    
  3. Następnie na wykończenie, przywrócić ustawienia

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

Dziękuję za odpowiedź. Użyłem tego pozwolenia. Naprawiłem jeden z moich problemów. Głośnik nie jest domyślnie włączony. Ale z tym kodem próbowałem uruchomić odtwarzacz muzyki i zaczął działać na przednim głośniku. Każdy pomysł, jak zmienić to na domyślne? – SoH

+0

Ustawieniem domyślnym jest ustawienie użytkownika urządzenia przed uruchomieniem aplikacji. Chodzi o to, aby przywrócić ustawienia menedżera AudioManagera, aby stan był przed zmianą. Jeśli więc głośnik jest wyłączony przed uruchomieniem aplikacji, zostanie wyłączony po zatrzymaniu aplikacji. – TouchBoarder

+0

@hsigmond czy to jest OK, jeśli zmienimy tryb po uruchomieniu AudioTrack? – onmyway133

1

ustawić to podczas zamykania aplikacji.

m_amAudioManager.setMode (AudioManager.MODE_NORMAL);