首页 > 解决方案 > 为什么我需要点击两次才能播放音频

问题描述

我创建了一个 MediaPlayer 以使用相同的按钮播放音频。当我第一次单击播放音频时,它是工作的,之后当我再次按下播放相同的音频时,我必须单击另一次按下播放音频(2 次)。我怎样才能解决这个问题。

我使用的播放音频方法

    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;
        }
    });
}

标签: javaandroidaudio

解决方案


原因很明显,点击监听器中有两个分支,只有一个分支允许播放 mediaPlayer;所以你必须在第一次点击时掉入另一个分支。

一个可能的解决方法是在播放完成时强制释放 mediaPlaer 资源,以便您始终确保在下次单击时转到第一个分支:

mediaPlayer.setOnCompletionListener(mp1 -> {
    mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0);
    mediaPlayer.release();
    mediaPlayer = null;             
});

推荐阅读