我的应用只播放一次声音。通过按钮调用播放声音方法。如果一个人玩,也不会再玩。
我做错了什么?
public class ScanBarcodeActivity extends AppCompatActivity {
MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
//other stuff
mp = new MediaPlayer();
}
public void playSuccessBeep() {
try {
if (mp.isPlaying()) {
mp.stop();
mp.release();
mp = new MediaPlayer();
}
AssetFileDescriptor descriptor = getAssets().openFd("Success.wav");
mp.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
descriptor.close();
mp.prepare();
mp.setVolume(1f, 1f);
mp.setLooping(false);
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void playIncorrectBeep() {
try {
if (mp.isPlaying()) {
mp.stop();
mp.release();
mp = new MediaPlayer();
}
AssetFileDescriptor descriptor = getAssets().openFd("Error.wav");
mp.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
descriptor.close();
mp.prepare();
mp.setVolume(1f, 1f);
mp.setLooping(false);
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
在mp准备好之前,好像你正在调用start。只需改变你的
mp.prepare();
mp.setVolume(1f, 1f);
mp.setLooping(false);
mp.start();
到下面
mp.prepare();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setVolume(1f, 1f);
mp.setLooping(false);
mp.start();
}
});
此外,只有正在播放时才停止和释放媒体播放器。所以改变这个
if (mp.isPlaying()) {
mp.stop();
mp.release();
mp = new MediaPlayer();
}
到
if (mp.isPlaying()) {
mp.stop();
}
if(mp!=null){
mp.release();
mp = new MediaPlayer();
}
答案 1 :(得分:0)
删除if(MP.isPlaying)并替换
mp.stop();
mp.release();
mp = new MediaPlayer();
到
mp.stop();
mp.reset()