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.
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