提问者:小点点

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


问题的标题可能看起来重复,但我的问题有时是一个问题,会导致故障。当插入耳机时,我使用以下代码通过扬声器播放。

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

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

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

上面的代码以以下方式播放音频:1.很少时候,它可以完美播放。2.大多数时候,它在背景中播放循环声音。3.很少时候,它什么都不播放。

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


共2个答案

匿名用户

我有一个类似的问题,我解决了,创建一个新的媒体播放器,如果它不播放,并将媒体播放器流类型设置为音频管理器的相同模式,尝试这样做:

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

匿名用户

在研究了一点点(也许不止于此)之后,我找到了它的解决方案。

我们应该创建自己的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以获得更好的图片。