My app only plays a sound only once. The play sound methods are called from a button press. If one is played neither will play again.
What did I do wrong?
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();
}
}
}
It seems like you are calling start before the mp is prepared. Just change your
mp.prepare();
mp.setVolume(1f, 1f);
mp.setLooping(false);
mp.start();
to below
mp.prepare();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setVolume(1f, 1f);
mp.setLooping(false);
mp.start();
}
});
ALso you are stopping and releasing media player only if it is playing. So change this
if (mp.isPlaying()) {
mp.stop();
mp.release();
mp = new MediaPlayer();
}
to
if (mp.isPlaying()) {
mp.stop();
}
if(mp!=null){
mp.release();
mp = new MediaPlayer();
}
Remove if(MP.isPlaying) and replace
mp.stop();
mp.release();
mp = new MediaPlayer();
to
mp.stop();
mp.reset()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.