簡體   English   中英

Android應用僅播放一次聲音

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM