首页 文章

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

提问于
浏览
20

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

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.大多数时候,它在背景中播放循环声 . 几次,它什么都不玩 .

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

2 回答

  • 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中

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

相关问题