【问题标题】:How to Play audio through speaker even when headset is plugged in?即使插入耳机,如何通过扬声器播放音频?
【发布时间】:2015-10-02 13:51:11
【问题描述】:

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

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. 几次,它什么都不播放。

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

【问题讨论】:

    标签: android android-audiomanager


    【解决方案1】:

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

    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 中

    【讨论】:

    • 我们最好不要调用 setMode(),因为它会干扰 Android 电话。我们可以将音频流类型设置为 STREAM_RING 以在扬声器和耳机中播放声音。
    • audioManager.setSpeakerphoneOn(true); 这就是我要找的。谢谢
    【解决方案2】:

    在做了一些工作之后(也许不止这些),我找到了解决方案。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多