问题的标题可能会重复出现,但我的问题有时会出现问题并导致故障。我已经使用以下代码在插入耳机时通过扬声器播放。
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.STREAM_MUSIC);
audioManager.setSpeakerphoneOn(true);
if(! Globals.mediaPlayer.isPlaying()){
Globals.mediaPlayer.start();
}
以上代码通过以下方式播放音频: 很少次,它完美播放。 2.大多数时候,它在背景中播放循环声。 很少有人会发挥任何作用。
当插入耳机时,似乎系统声音播放时没有错误。例如 - 设置铃声会正确播放相应的铃声而不会出现任何故障。请帮助我了解如何通过插入耳机的扬声器正确播放声音。
答案 0 :(得分:12)
我有一个类似的问题,我解决了,如果它没有播放并创建一个新的媒体播放器,并将媒体播放器流类型设置为音频管理器的相同模式,请尝试这样的事情:
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();
}
就我而言,我使用的是AudioManager.MODE_IN_COMMUNICATION。 另外一定要设置权限
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
AndroidManifest.xml中的
答案 1 :(得分:11)
稍微研究一下(可能更多),我找到了解决方案。
我们应该创建自己的MediaPlayer实例并为该实例设置音频流类型,而不是更改AudioManager的设置。我们可以将其设置为STREAM_RING以将音频路由到耳机和扬声器。
player.reset();
player.setAudioStreamType(AudioManager.STREAM_RING);
try {
player.setDataSource(context, uri);
player.prepareAsync();}
然后,您可以收听onPreparedListener来启动音频。请查看博客Route audio through speaker in Android以获得更好的图片。