How to Play audio through speaker even when headset is plugged in?

crazy_coder picture crazy_coder · Jul 14, 2015 · Viewed 12.6k times · Source

The title of the question might look repeated, but my problem is a sometimes problem and causes glitches. I have used the below code to play through speaker when headset is plugged in.

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

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

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

The above code plays audio in the following ways: 1. Very few times, it plays perfectly. 2. Most of the times, it plays with a looping sound in the background. 3. Few times, it doesnot play anything.

It seems that system sounds play with no error when headset is plugged in. For example - setting the ringtone plays the corresponding ringtone correctly without any glitches. Please help me to understand how I can play a sound correctly through speaker with headset plugged in.

Answer

isma3l picture isma3l · Jul 18, 2015

I had a similar problem that I solved, creating a new media player if it's not playing and setting the media player stream type to the same mode of the audio manager, try with something like this:

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

In my case I was using AudioManager.MODE_IN_COMMUNICATION. Also be sure to set the permission

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

in the AndroidManifest.xml