Media Player start stop start

后端 未结 9 1993
死守一世寂寞
死守一世寂寞 2020-12-10 13:09

I am making a new android sound application. I made a clickable button to play sound when I click on it. But I also want it to stop playing sound when I click for the second

相关标签:
9条回答
  • 2020-12-10 13:34

    You're calling mpButtonClick1.reset() after mpButtonClick1.stop() - don't do that:

    if (mpButtonClick1.isPlaying()) {
        mpButtonClick1.stop();
        mpButtonClick1.reset(); //<--------- calling reset(), remove this line
    }
    

    The docs for reset() say:

    Resets the MediaPlayer to its uninitialized state. After calling this method, you will have to initialize it again by setting the data source and calling prepare().

    Remove mpButtonClick1.reset() and it should work.

    Keep in mind that MediaPlayer works as a state machine, which means that if you call methods in the wrong order, you'll get problems. Please read about MediaPlayer here and here.

    0 讨论(0)
  • 2020-12-10 13:36

    In my experience when I need to play multiple times and I may need to stop one play to start another play, (like in the case of multiple buttons), I just create another player, making sure that I release the resources for the previous one. To stop just use

    mediaPlayer.stop(); 
    

    But for play use something like this (adapt the logging to your specific needs) to create/recreate your player:

    private boolean createMediaPlayer()
    {
        if (mediaPlayer!=null)
        {
            if(mediaPlayer.isPlaying())
            {
                mediaPlayer.stop();
                mediaPlayer.reset();
                mediaPlayer.release();
                mediaPlayer=null;
            }
    
        }
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setVolume(1f, 1f);
        try
        {
            mediaPlayer.setAudioStreamType(Interop.PRIMARY_STREAM);
            mediaPlayer.setDataSource(m_soundFile);
            mediaPlayer.prepare();
            return true;
            // Interop.logDebug(TAG + "-loadAudio: SUCCESS" + m_soundFile);
        } catch (Exception e)
        {
            Interop.logError(TAG + "-LoadAudio for Clic Sound: audioPlayer prepare failed for current file: " + m_soundFile);
            Interop.logError(TAG + "-Exception: " , e);
            return false;
        }
    }
    

    and than use

    if (createMediaPlayer())
        mediaPlayer.start();
    

    this will ensure proper release of the resources used by the media player.

    0 讨论(0)
  • 2020-12-10 13:38

    Try this: You should use only one mediaplayer object

        public class PlayaudioActivity extends Activity {
    
        private MediaPlayer mp;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button b = (Button) findViewById(R.id.button1);
        Button b2 = (Button) findViewById(R.id.button2);
        final TextView t = (TextView) findViewById(R.id.textView1);
    
        b.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
            stopPlaying();
            mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.far);
            mp.start();
            }
    
        });
    
        b2.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
            stopPlaying();
            mp = MediaPlayer.create(PlayaudioActivity.this, R.raw.beet);
            mp.start();
            }
        });
        }
    
        private void stopPlaying() {
            if (mp != null) {
                mp.stop();
                mp.release();
                mp = null;
           }
        }
    }
    
    0 讨论(0)
提交回复
热议问题