java - 我的媒体播放器启动了一个新实例而不是停止

标签 java android android-mediaplayer

我正在制作一个媒体播放器来播放存储在 firebase 上的 mp3 混音。我可以让链接播放没问题。但是当我再次按下该项目时,我希望它相当于按下停止。但由于某种原因,它并没有停止,而是启动了一个新的媒体实例。有人可以告诉我我做错了什么吗。

我的代码

在我的创作中

mMediaplayer = null;

然后是我的方法

 private void fetchAudioUrlFromFirebase() throws IOException {
    String mp3 = mp3url;

    mMediaplayer = new MediaPlayer();
    mMediaplayer.setDataSource(mp3);
    mMediaplayer.prepare();//prepare to play
    if (mMediaplayer.isPlaying()) {
        stopPlaying();
    } else {
        playMedia();
    }



}

private void stopPlaying() {

    if (mMediaplayer != null) {
        mMediaplayer.stop();
    }
}


private void playMedia() {

        mMediaplayer.start();
    }
}

然后在item onclick

 try {
         fetchAudioUrlFromFirebase();
      } catch (IOException e) {
      e.printStackTrace();
      }

最佳答案

问题:假设媒体播放器已经在播放

// song is playing
mMediaplayer = new MediaPlayer(); // you created a new player
mMediaplayer.setDataSource(mp3);
mMediaplayer.prepare();//prepare to play
if (mMediaplayer.isPlaying()) { // new player is not in playing state
    stopPlaying();              // so you always checking the state of new player
} else {
    playMedia();
}

先检查再创建

if (mMediaplayer!=null && mMediaplayer.isPlaying()) {
    stopPlaying();
} 
mMediaplayer = new MediaPlayer();
mMediaplayer.setDataSource(mp3);
mMediaplayer.prepare();//prepare to play
playMedia();

所以逻辑可以简化为

if (mMediaplayer!=null && mMediaplayer.isPlaying()) {
    mMediaplayer.stop();
    mMediaplayer.release();
} 
mMediaplayer = new MediaPlayer();
mMediaplayer.setDataSource(mp3);
mMediaplayer.prepare();//prepare to play
mMediaplayer.start();

关于java - 我的媒体播放器启动了一个新实例而不是停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45121831/

相关文章:

java - Payara/Glassfish JAX-RS 多部分

android - 尝试运行android项目时有两种资源和一个调试错误

android - 如何在没有任何延迟的情况下在android中循环播放音频文件?

java - Android 音乐播放器不播放选定的歌曲

android - 播放完声音后如何释放 MediaPlayer?

java - 当我的 Java 小程序在较旧的 Java 版本上运行但使用新类时会发生什么情况?

java - 无法解压 snappy 文件,即使指定了 -Djava.library.path=/*/*/

java - 是否可以在 JavaFX 中将 ImageView 放在 Canvas 上?

android - 如何处理不同产品 flavor 的 Assets

android - Android中的瞬时通知和持久通知是什么?