2015-07-14 7 views
18

Il titolo della domanda potrebbe sembrare ripetuto, ma il mio problema è a volte un problema e causa problemi. Ho usato il codice qui sotto per giocare attraverso l'altoparlante quando l'auricolare è collegatoCome riprodurre l'audio attraverso l'altoparlante anche quando l'auricolare è collegato?

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

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

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

Il codice di cui sopra riproduce l'audio nei seguenti modi:. 1. Molto paio di volte, essa svolge perfettamente. 2. La maggior parte delle volte, suona con un suono in loop in background. 3. Poche volte, non suona nulla.

Sembra che i suoni di sistema suonino senza errori quando l'auricolare è collegato. Ad esempio, impostando la suoneria suona correttamente la suoneria corrispondente senza alcun problema. Per favore aiutami a capire come posso riprodurre correttamente un suono attraverso l'altoparlante con l'auricolare inserito.

risposta

10

Dopo aver lavorato su di esso un po '(forse di più), ho capito la soluzione per esso.

Invece di modificare le impostazioni di AudioManager, dovremmo creare la nostra istanza di MediaPlayer e impostare il tipo di flusso Audio per quell'istanza. Possiamo impostarlo su STREAM_RING per indirizzare l'audio alle cuffie e all'altoparlante.

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

Quindi, è possibile ascoltare onPreparedListener per avviare l'audio. Si prega di controllare il blog Route audio through speaker in Android per ottenere un'immagine migliore.

10

Ho avuto un problema simile che ho risolto, creando un nuovo lettore multimediale se non sta riproducendo e impostando il tipo di flusso del lettore multimediale sul stessa modalità del gestore audio, provare con qualcosa di simile:

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(); 
} 

Nel mio caso ho usato AudioManager.MODE_IN_COMMUNICATION. anche essere sicuri di impostare l'autorizzazione

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

nel AndroidManifest.xml

+1

Preferibilmente, non dovremmo chiamare setMode() perché interferisce con la telefonia Android. Possiamo impostare il tipo di streaming audio su STREAM_RING per riprodurre l'audio sia in altoparlante che in cuffia. –

+0

'audioManager.setSpeakerphoneOn (true);' questo è quello che sto cercando. Grazie – okarakose

Problemi correlati