单击按钮时,我会尝试重放声音。但我得到错误(-19,0)(这意味着什么^^)
我的代码:
final Button xxx = (Button)findViewById(R.id.xxx);
xxx.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.plop);
mp.start();
}
});
我的错误是什么?
答案 0 :(得分:2)
我遇到了同样的问题,我通过添加以下代码解决了这个问题:
mp1 = MediaPlayer.create(sound.this, R.raw.pan1);
mp1.start();
mp1.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.release();
};
});
答案 1 :(得分:0)
您需要在开始新媒体播放器之前释放它。
将MediaPlayer
声明为实例变量,然后:
mp = null;
final Button xxx = (Button)findViewById(R.id.xxx);
xxx.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (mp != null) {
mp.stop();
mp.release();
}
mp = MediaPlayer.create(getApplicationContext(), R.raw.plop);
mp.start();
}
});
或者在你的情况下,因为你总是播放相同的声音,你不需要释放播放器并创建一个新的播放器,只需重复使用旧的播放器。
final MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.plop);
mp.prepare(); // Blocking method. Consider to use prepareAsync
final Button xxx = (Button)findViewById(R.id.xxx);
xxx.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mp.stop();
mp.start();
}
});
答案 2 :(得分:-1)
我通过以下代码解决了这个问题:
public static void playSound() {
mMediaPlayer = new MediaPlayer();
try {
AssetFileDescriptor afd = context.getAssets().openFd("type.mp3");
mMediaPlayer.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
mMediaPlayer.prepare();
mMediaPlayer.start();
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
arg0.release();
}
});
} catch (IllegalArgumentException | IllegalStateException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我希望能帮助你。