使用变量播放和暂停 Mediaplayer

Play and pause Mediaplayer with variable

我正在尝试构建一个 Android 应用程序,用户可以在其中播放用数据库中的 id 标记的音频文件。

//get id from database and turn it into a string, add letter a, because its a res file
        stringId = "a" + String.valueOf(standard.getId());
        //find playbutton
        final FloatingActionButton play = (FloatingActionButton) findViewById(R.id.play);
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //to be able to feed mediaplayer a variable I put it in another function called playAudio
                playAudio(stringId, true);     }
        });

    final FloatingActionButton pause = (FloatingActionButton) findViewById(R.id.pause);
    play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            playAudio(stringId, false);     }
    });

playAudio 看起来像这样:

private void playAudio(String nameOfFile, Boolean booleanPlay){
        MediaPlayer mediaPlayer = MediaPlayer.create(this, getResources().getIdentifier(nameOfFile, "raw", getPackageName()));
        if (booleanPlay = true){
            if (!mediaPlayer.isPlaying())
            mediaPlayer.start();
        }
        if (booleanPlay = false){
            mediaPlayer.pause();
        }
    }

当我 运行 我的代码每次按下播放时,它都会创建一个新的媒体播放器,该播放器与其他媒体播放器同时开始播放,暂停按钮出于同样的原因不起作用。我不知道如何让它工作。

不要在每次播放新文件时都创建一个新的 MediaPlayer 实例。在开头创建一个实例并重用它:

private static MediaPlayer mediaPlayer = new MediaPlayer ();

改变播放文件时,试试这段代码:

AssetFileDescriptor afd = getApplicationContext ().getResources ().openRawResourceFd (R.raw.sound);

if (afd != null)
{
    mediaPlayer.reset()
    mediaPlayer.setDataSource(afd.getFileDescriptor (), afd.getStartOffset (), afd.getLength ());
    mediaPlayer.setLooping (true);
    mediaPlayer.prepare ();
    mediaPlayer.start ();
}

R.raw.sound 替换为要播放的声音的文件名(这将在 res/raw 文件夹中)或使用不同的方式引用根据需要归档。

这对我有用——在 Android 8.1(目标)上测试过。希望这可以帮助。

编辑添加:我刚刚注意到你在 if(booleanPlay = false) 中有错误的运算符if (booleanPlay = true) 语句。它们应该是==(比较,而不是赋值)。 最后一件事:退出时,您应该调用 mediaPlayer.release() 来释放资源,但您可能知道这一点。很高兴能帮上忙。