我正在尝试构建一个Android应用程序,用户可以在其中播放标有数据库id的audiofiles。
//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();
}
}
当我每次按下播放时运行我的代码时,它会创建一个新的媒体播放器,它与其他媒体播放器同时开始播放,暂停按钮由于同样的原因不起作用。我无法弄清楚如何使它发挥作用。
答案 0 :(得分:0)
每次播放新文件时都不要创建新的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()来释放资源,但你可能知道这一点。很高兴我能提供帮助。