当前位置: 首页 > 知识库问答 >
问题:

通过插上耳机的扬声器播放音频

冀永寿
2023-03-14

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

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" />
   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();

但我得到了

IllegalStateException

有什么想法可以解决这个问题吗?

共有1个答案

牛凌
2023-03-14

我将提供一个完整的代码片段(在Android24上测试),我必须将其从多个提示聚合到解决方案:

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();
    }
}

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

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 类似资料:
  • 我在我的应用程序中为某些通知添加声音,就像这样: 播放通知声音时,即使将耳机插入手机,也会通过扬声器播放,因此扬声器和耳机都会播放该声音。 如果插上耳机,有没有办法只通过耳机播放声音?

  • 问题的标题可能看起来重复,但我的问题有时是一个问题,会导致故障。当插入耳机时,我使用以下代码通过扬声器播放。 上面的代码以以下方式播放音频:1.很少时候,它可以完美播放。2.大多数时候,它在背景中播放循环声音。3.很少时候,它什么都不播放。 插入耳机时,系统声音播放似乎没有错误。例如-设置铃声正确播放相应的铃声,没有任何故障。请帮助我了解如何在插入耳机的情况下通过扬声器正确播放声音。

  • 在我的应用程序中,有一个使用设备音频插孔的读卡器。现在,我的问题是,当读卡器在设备的耳机插孔中完好无损时,我想从内置扬声器中发出声音。 以下是我尝试过的代码: 1) 使用反射方法 2)使用setMode方法 但这两种代码仅在具有默认FM应用程序的设备中运行。但我想在所有设备中都具有此功能。 请分享你的经验!!

  • 是否可以通过Android设备的手机扬声器播放音频?手机内部较小的扬声器,可产生低音量声音,只有在将耳朵贴在电话上时才能听到。 希望我的描述足够清楚,可以理解我的问题。 如果可能的话,一个如何实现这一点的例子将非常有帮助。 目前我正在使用下面的代码初始化我的MediaPlayer。

  • 有没有办法通过耳机传送麦克风输入,同时通过智能手机扬声器使用音频输出? 我已经看了几个小时了,我看到这在iOS上显然是不可能的,但是Android呢... 我用的是三星Galaxy S4。 这是我的代码的一部分,即使耳机已插入,也可以通过扬声器路由音频输出: 但当我试图通过耳机的麦克风控制我的应用程序时,什么都没有。所以我试着用智能手机的那一个,它显然起作用了。 它看起来不像其他AudioMana

  • 在某些Android设备中尝试在听筒上播放音频文件时似乎存在问题。预期的行为是它应该在听筒中播放音频文件,但在某些设备中,如三星Galaxy Note 2(Android版本4.4.2)和Sony Xperia XA(Android版本6.0),它通过扬声器播放它们。 然而,在摩托罗拉moto g(Android版本6.0)和nexus 5X(Android版本7.0)等设备中,它工作正常。 该应