【问题标题】:Play Audio Through Speakers with Headphones Plugged In通过插入耳机的扬声器播放音频
【发布时间】:2017-03-10 18:04:12
【问题描述】:

我想通过带有插入式耳机的扬声器播放音频文件。

我尝试了以下方法: MainActivity.java:

AudioManager audioManager = (AudioManager)mainActivity
     .getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.STREAM_MUSIC);
audioManager.setSpeakerphoneOn(true);
MediaPlayer mp = MediaPlayer.create(mainActivity, R.raw.chime);
mp.setAudioStreamType(AudioManager.STREAM_RING);
mp.start();

清单:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

但音频仍通过插入的耳机播放。如何在插入耳机的情况下正确地将音频输出定向到扬声器?

编辑 1:

我尝试了Android, how to route the audio to speakers when headphones inserted?帖子中的以下代码:

   MediaPlayer mp = MediaPlayer.create(mainActivity, R.raw.chime);
   AudioManager am = (AudioManager) mainActivity.getSystemService(mainActivity.AUDIO_SERVICE);
    try {
        mp.setAudioStreamType(AudioManager.STREAM_ALARM);
        mp.setLooping(true);
        mp.prepare();
    } catch (IllegalArgumentException | SecurityException| IllegalStateException | IOException e) {
        Log.i("TAG","Error is " + e.toString());
        e.printStackTrace();
    }
    am.requestAudioFocus(null, AudioManager.STREAM_ALARM,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
    mp.start();

但我得到了

java.lang.IllegalStateException

有什么办法解决这个问题吗?

【问题讨论】:

标签: android audio android-mediaplayer


【解决方案1】:

我将提供完整的代码 sn-p(在 Android 24 上测试),我必须从多个提示汇总到解决方案:

public class AudioClass
{
    AudioManager audioManager;
    Activity activity;

    public AudioClass(Activity activity)
    {
       this.activity = activity;

        //NEEDS TO BE DONE BEFORE PLAYING AUDIO!
        audioManager = (AudioManager)
            activity.getSystemService(Context.AUDIO_SERVICE);
        audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
        audioManager.setSpeakerphoneOn(true);
    }

    public void playAudio() {
        //CAN BE CALLED FROM ANYWHERE AFTER AudioClass IS INSTANTIATED
        MediaPlayer mp = MediaPlayer.create(activity, R.raw.audio_file_name);
        mp.setAudioStreamType(AudioManager.MODE_IN_COMMUNICATION);
        mp.start();
    }
}

并且需要在manifest中设置修改音频设置的权限:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

【讨论】:

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