即使插入耳机,如何通过扬声器播放音频?

时间:2015-07-14 04:55:43

标签: android android-audiomanager

问题的标题可能会重复出现,但我的问题有时会出现问题并导致故障。我已经使用以下代码在插入耳机时通过扬声器播放。

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

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

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

以上代码通过以下方式播放音频: 很少次,它完美播放。 2.大多数时候,它在背景中播放循环声。 很少有人会发挥任何作用。

当插入耳机时,似乎系统声音播放时没有错误。例如 - 设置铃声会正确播放相应的铃声而不会出现任何故障。请帮助我了解如何通过插入耳机的扬声器正确播放声音。

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以获得更好的图片。

相关问题