【发布时间】:2018-06-15 19:37:38
【问题描述】:
我已经做了很多谷歌搜索,但其他的解决方案对我不起作用。
我的目标是在报警频道上按需播放声音。
(所以音量是通过闹钟音量设置来调节的)
从这个thread 我构建了以下代码
mediaPlayerScan = MediaPlayer.create(getContext(), 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);
}
它仍在音乐频道上播放。 (IE音量是在音乐设置里调节的,不是闹铃)
我的直觉是我缺少一个权限或其他东西,但我没有找到这样的权限。
我在 Google Pixel 1 上进行测试
谢谢,
内森
编辑:
感谢@jeffery-blattman,下面的代码对我有用
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();
}
【问题讨论】:
-
这可能在主线程上有问题 - 对 mediaPlayerScan.start() 的调用在哪里?我在下面发布了包含所有详细信息的答案。你做 setDataSource 的方式也不错,但请告诉我们 R.string.res_path 是什么样子的!
标签: android