2015-07-14 15 views
18

Tytuł pytania może wyglądać na powtarzany, ale moim problemem jest czasami problem i powoduje usterki. Użyłem poniższy kod do gry przez głośnik, gdy zestaw słuchawkowy jest podłączonyJak odtwarzać dźwięk przez głośnik, nawet gdy zestaw słuchawkowy jest podłączony?

AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); 

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

     if(! Globals.mediaPlayer.isPlaying()){ 
      Globals.mediaPlayer.start(); 
     } 

Powyższy kod odtwarza dźwięk w jeden z następujących sposobów:. 1. Bardzo kilka razy, to gra świetnie. 2. W większości przypadków jest odtwarzany z dźwiękiem pętli w tle. 3. Kilka razy nie gra niczego.

Wygląda na to, że dźwięki systemu są odtwarzane bez błędu, gdy zestaw słuchawkowy jest podłączony. Na przykład - ustawienie dzwonka odtwarza odpowiedni dzwonek bez żadnych zakłóceń. Pomóż mi zrozumieć, w jaki sposób mogę poprawnie odtwarzać dźwięk przez głośnik z podłączonym zestawem słuchawkowym.

Odpowiedz

10

Po pracy na nim trochę (a może więcej niż to), ja zorientowali się rozwiązania.

Zamiast zmieniać ustawienia menedżera AudioManager, należy utworzyć własną instancję MediaPlayer i ustawić typ strumienia audio dla tej instancji. Możemy ustawić go na STREAM_RING, aby kierować dźwięk do zestawu słuchawkowego i głośnika.

player.reset(); 
    player.setAudioStreamType(AudioManager.STREAM_RING); 
    try { 
     player.setDataSource(context, uri); 
     player.prepareAsync();} 

Następnie można odsłuchiwać onPreparedListener, aby rozpocząć odtwarzanie dźwięku. Sprawdź blog Route audio through speaker in Android, aby uzyskać lepszy obraz.

10

Miałem podobny problem, który rozwiązałem, tworząc nowy odtwarzacz multimedialny, jeśli nie jest odtwarzany i ustawiając typ strumienia odtwarzacza multimediów na sam tryb menedżera dźwięku, spróbuj coś takiego:

AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.STREAM_MUSIC); 
audioManager.setSpeakerphoneOn(true); 

if(! Globals.mediaPlayer.isPlaying()){ 
    MediaPlayer mp = MediaPlayer.create(....); 
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mp.start(); 
} 

w moim przypadku używałem AudioManager.MODE_IN_COMMUNICATION. Również należy ustawić uprawnienie

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

w AndroidManifest.xml

+1

Najlepiej, nie powinniśmy wywoływać metody setMode(), ponieważ zakłóca ona telefonię z systemem Android. Możemy ustawić typ strumienia audio na STREAM_RING, aby odtwarzać dźwięk w głośniku i zestawie słuchawkowym. –

+0

'audioManager.setSpeakerphoneOn (true);' tego właśnie szukam. dzięki – okarakose