【问题标题】:Android app plays sound only one timeAndroid 应用只播放一次声音
【发布时间】:2016-04-11 18:28:25
【问题描述】:

我的应用只播放一次声音。通过按下按钮调用播放声音方法。如果播放了一个,则两者都不会再次播放。

我做错了什么?

    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();
        }
    }

    }

【问题讨论】:

    标签: java android android-mediaplayer


    【解决方案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();
                   }
    

    【讨论】:

      【解决方案2】:

      删除 if(MP.isPlaying) 并替换

                  mp.stop();
                  mp.release();
                  mp = new MediaPlayer();
      

                  mp.stop();
                  mp.reset()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多