[英]Android app plays sound only one time
我的應用僅播放一次聲音。 按下按鈕即可調用播放聲音的方法。 如果播放了一個,則不會再播放。
我做錯了什么?
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();
}
}
}
似乎您在准備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();
}
刪除if(MP.isPlaying)並替換
mp.stop();
mp.release();
mp = new MediaPlayer();
至
mp.stop();
mp.reset()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.