使用变量播放和暂停 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() 来释放资源,但您可能知道这一点。很高兴能帮上忙。
我正在尝试构建一个 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() 来释放资源,但您可能知道这一点。很高兴能帮上忙。