Java 为什么我需要单击两次才能播放音频
我创建了一个MediaPlayer,用同一个按钮播放音频。当我第一次单击播放工作音频时,之后当我再次按以播放同一音频时,我必须单击另一次按以播放音频(2次)。我怎样才能解决这个问题 我使用的播放音频方法Java 为什么我需要单击两次才能播放音频,java,android,audio,Java,Android,Audio,我创建了一个MediaPlayer,用同一个按钮播放音频。当我第一次单击播放工作音频时,之后当我再次按以播放同一音频时,我必须单击另一次按以播放音频(2次)。我怎样才能解决这个问题 我使用的播放音频方法 private void playAudio() { Button button = findViewById(R.id.play_audio); button.setOnClickListener(v -> { if (mediaPlayer ==
private void playAudio() {
Button button = findViewById(R.id.play_audio);
button.setOnClickListener(v -> {
if (mediaPlayer == null) {
final AudioManager mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
final int originalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
mediaPlayer = MediaPlayer.create(Main.this, R.raw.testa);
mediaPlayer.start();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnCompletionListener(mp1 -> mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0));
} else {
mediaPlayer.stop();
mediaPlayer = null;
}
});
}
原因很明显,在click listener中有两个分支,只有一个分支允许播放mediaPlayer;所以你一定是在第一次点击的时候掉到了另一个树枝上 一个可能的修复方法是在播放完成时强制释放mediaPlaer资源,以便您始终确保在下一次单击时转到第一个分支:
mediaPlayer.setOnCompletionListener(mp1 -> {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0);
mediaPlayer.release();
mediaPlayer = null;
});
那么,您当前的逻辑是,每次单击要么开始播放,要么停止播放,而不是同时开始播放和停止播放。因此,我不知道您为什么希望得到任何其他结果。我猜,第一次单击时,mediaPlayer==null返回true,第二次则不是,因此,请将if块中的代码提取到一个方法,在执行else块中当前的代码后,也可以调用该方法。请尝试读取您发布的代码。