通过插入耳机的扬声器播放音频
Play Audio Through Speakers with Headphones Plugged In
我想通过插入耳机的扬声器播放音频文件。
我尝试了以下方法:
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:
我尝试了 post 中的以下代码:
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 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" />
我想通过插入耳机的扬声器播放音频文件。
我尝试了以下方法: 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:
我尝试了 post
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 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" />