我已经尝试使用以下代码在我的应用程序中设置媒体播放器的音频流,但是当我这样做时,我在模拟器中听不到声音。如果我没有为播放器设置流,那么音频就会正常播放。我确定我用错了,但是我不能解决这个问题,有什么帮助吗?
MediaPlayer player = MediaPlayer.create(getApplicationContext(), R.raw.test_audio);
AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
audioManager.setStreamVolume(AudioManager.STREAM_ALARM, audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.start();
注意:我已经将MODIFY_AUDIO_SETTINGS权限添加到我的清单中。
谢谢!
发布于 2017-01-04 08:38:50
问题是您正在使用MediaPlayer.create()
创建您的MediaPlayer。Create
函数调用prepare()
函数,该函数定版您的媒体,并且不允许您更改AudioStreamType
。
解决方案是使用setDataSource
而不是create
MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setLooping(true);
try {
mp.setDataSource(getApplicationContext(), yourAudioUri);
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mp.start();
有关详细信息,请参阅this link。
发布于 2013-07-17 19:21:57
setAudioStreamType(整型流类型)
必须在prepare()之前调用此方法;
MediaPlayer.create(Context context,int resid)
如果成功,prepare()将已经被调用,并且不能再被调用。
发布于 2018-06-16 04:04:23
这里的解决方案在API 22中已被弃用
我打开了我自己的thread来解决这个问题。
这是一个更新的工作解决方案。
mediaPlayerScan = new MediaPlayer();
try {
mediaPlayerScan.setDataSource(getContext(),
Uri.parse(getString(R.string.res_path) + R.raw.scan_beep));
if (Build.VERSION.SDK_INT >= 21) {
mediaPlayerScan.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
} else {
mediaPlayerScan.setAudioStreamType(AudioManager.STREAM_ALARM);
}
mediaPlayerScan.prepare();
} catch (IOException e) {
e.printStackTrace();
}
https://stackoverflow.com/questions/7057115
复制相似问题