Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android停止以前的mediaplayer?_Java_Android_Android Mediaplayer_Togglebutton - Fatal编程技术网

Java Android停止以前的mediaplayer?

Java Android停止以前的mediaplayer?,java,android,android-mediaplayer,togglebutton,Java,Android,Android Mediaplayer,Togglebutton,我有3个切换按钮。我有它的工作,当点击它会播放一个声音,按钮会切换到“停止”。当声音结束时,如果您在播放时单击“停止”,它将切换回“播放”。声音将停止并切换回 然而,我的问题是,如果我点击两个按钮,它们都在播放,我无法停止前一个按钮。这是因为我无法访问以前的mediaPlayer,只能访问当前的mediaPlayer。这是我目前的尝试,任何帮助都会很好,谢谢 @Override public void onClick(View v) { int soundFile = 0;

我有3个切换按钮。我有它的工作,当点击它会播放一个声音,按钮会切换到“停止”。当声音结束时,如果您在播放时单击“停止”,它将切换回“播放”。声音将停止并切换回

然而,我的问题是,如果我点击两个按钮,它们都在播放,我无法停止前一个按钮。这是因为我无法访问以前的mediaPlayer,只能访问当前的mediaPlayer。这是我目前的尝试,任何帮助都会很好,谢谢

@Override
public void onClick(View v) 
    {

    int  soundFile = 0;

    switch (v.getId()) 
    {

    case (R.id.btnSound1):

        soundFile = R.raw.sound1;

    break;
        case (R.id.btnSound2):

        soundFile = R.raw.sound2;

    break;
    case (R.id.btnSound3):

        soundFile = R.raw.sound3;

    break;

   }

    final ToggleButton button = (ToggleButton) findViewById(v.getId()); //gets current button
    MediaPlayer media = (MediaPlayer) button.getTag();                  //gets mediaPlayer object stored in button
    if(button.getTag().equals(null))                          //only runs this once, if the mediaPlayer stored object is null (doesn't exist)
    {
      media = getMedia(soundFile);
      button.setTag(media);            //set the new media object to the buttons tag
      media.start();


     media.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp)     //when sound is over
        {
            button.setChecked(true); //set back to play
            mp.release();
        }
    });

    button.setOnCheckedChangeListener(new OnCheckedChangeListener(){           //when clicked
        @Override
        public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) 
        {

            if(button.isChecked())      // if stop toggle clicked
            {
                button.setChecked(true); // set to play
                MediaPlayer media = (MediaPlayer) button.getTag();
                media.release();    //stop the sound
            }

            else if(!button.isChecked()) //if play toggle clicked
            {
                 MediaPlayer media = (MediaPlayer) button.getTag();
             media.start(); //play the sound
             button.setChecked(false); //set to stop

            }

        }
       });

    }


}   

public MediaPlayer getMedia(int sound)
{

    MediaPlayer mediaPlayer = MediaPlayer.create(getBaseContext(), sound);
    mediaPlayer.setVolume(100,100);  //sets the volume to max

    return mediaPlayer;
}

可以将对当前MediaPlayer对象的引用保留为类的私有字段;这样,您就可以在用新的替换之前对其调用stop()。或者更好的方法是,重用MediaPlayer对象。我现在可以使用它,因此当您单击一个新按钮时,以前的按钮会停止,但该按钮不会变回播放状态。如何向按钮添加类似onMediaStop侦听器的内容?当媒体完成时,它已经更改回原来的位置。如果停止播放,则不需要侦听器。只需保留对启动MediaPlayer的按钮的引用,并在停止播放音频时将其更改回原来的位置即可。