繁体   English   中英

Android媒体播放器无法正常工作

[英]Android media player not working as expected

我对android很陌生,刚开始时Android当前引用了过去2天的以下代码,无法解决此问题。

代码: https//github.com/quocnguyenvan/media-player-demo

问题:假设当我们单击第一首歌曲时,我们在ListView中有4首歌曲播放了一段时间,然后暂停而没有单击停止。 一旦我们单击第二首歌曲,第一首歌曲就会开始播放,除非单击第一首歌曲的停止,否则我们将无法播放第二首歌曲。如何解决此问题。

代码无法解决并解决它的问题。我在StackOverflow上发布之前已经引用了许多帖子,但未能实现,因此非常感谢任何建议或指导。

有问题的代码:

// play music
    viewHolder.ivPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(flag){
                mediaPlayer = MediaPlayer.create(context, music.getSong());
                flag = false;
            }
            if(mediaPlayer.isPlaying()) {
                mediaPlayer.pause();
                viewHolder.ivPlay.setImageResource(R.drawable.ic_play);
            } else {
                mediaPlayer.start();
                viewHolder.ivPlay.setImageResource(R.drawable.ic_pause);
            }
        }
    });

    // stop
    viewHolder.ivStop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(!flag) {
                mediaPlayer.stop();
                mediaPlayer.release();
                flag = true;
            }
            viewHolder.ivPlay.setImageResource(R.drawable.ic_play);
        }
    });

这些是我用来播放歌曲的步骤,您可以尝试与我的步骤同步以解决错误。

  private void initMembers() {
    //initialize the members here
    mMediaPlayer = new MediaPlayer();
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

    //media prepare
    mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(final MediaPlayer mediaPlayer) {
            //media player prepared
            togglePlayPausePlayer();
        }
    });

    //media completion
    mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(final MediaPlayer mediaPlayer) {
            //handle the media play completion
            handleOnCompletionLogic();
        }
    });
}

之后,每当我尝试播放歌曲时。 我称这种方法。

 public void playMusic(final MusicModel musicModel) {
    //here play the music with data in below
    try {
        if (mMediaPlayer.isPlaying()) {
            mMediaPlayer.stop();
        }
        mMediaPlayer.reset();
        mMediaPlayer.setDataSource(musicModel.getUrl());
        mMediaPlayer.prepareAsync();
    } catch (IOException | IllegalStateException exp) {
        exp.printStackTrace();
        showMessage(getString(R.string.error_unable_play));
    }
}

上面的操作会重设播放的歌曲并为播放器准备另一首歌曲。 和OnPreparedListener,它会调用togglePlayPausePlayer()来相应地播放和暂停歌曲。

 private void togglePlayPausePlayer() {
        //here handle the logic for play and pause the player
        if (mMediaPlayer.isPlaying()) {
            mMediaPlayer.pause();
            setPlayAndPause(false);
        } else {
            mMediaPlayer.start();
            setPlayAndPause(true);
        }
    }

关键是我们初始化播放器并为媒体播放器设置一个onPrepareListener以便准备好然后播放歌曲,这将检查歌曲是否正在播放,然后停止播放,否则播放。
希望对您有帮助。

对于单击ListView,您需要重置媒体播放器,更改数据源并开始播放新歌曲。

mp.reset();
mp.setDataSource("song you selected from ListView");
mp.prepare();
mp.start();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM