繁体   English   中英

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

[英]How to Play audio through speaker even 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();
        }

上面的代码通过以下方式播放音频:1。很少次,它播放完美。 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以启动音频。 请查看博客通过Android中的扬声器路由音频以获得更好的画面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM