【发布时间】:2017-06-12 15:49:58
【问题描述】:
我想在每次点击视图时播放声音:
我创建了一个简单的效果播放器:
public class EffectManager {
private static SoundPool soundPool;
private static int puzzlePieceOK;
private static int puzzleOK;
public static void init(Context context) {
if (soundPool == null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
soundPool = new SoundPool.Builder()
.setAudioAttributes(new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_GAME)
.build()
)
.setMaxStreams(10)
.build();
}
else {
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 1);
}
puzzlePieceOK = soundPool.load(context,R.raw.puzzle_piece_ok,1);
puzzleOK = soundPool.load(context,R.raw.puzzle_ok,1);
}
}
public static void playPuzzlePieceOK() {
soundPool.play(puzzlePieceOK,10,10, 1,0,1);
}
public static void playPuzzleOK() {
soundPool.play(puzzleOK,10,10, 1,1,1);
}
}
我在我的活动的onCreate 事件上致电EffectManager.init。然后我将此侦听器添加到我的视图中:
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EffectManager.playPuzzlePieceOK();
}
});
当我只点击第一个视图时,我可以听到声音。我尝试了不同的单击视图顺序,声音仅在第一次单击时播放。除了这个警告,我在控制台上没有任何消息错误。 :
W/AudioTrack: AUDIO_OUTPUT_FLAG_FAST denied by server
此警告仅在第一次点击时出现。
【问题讨论】: