Java Android停止以前的mediaplayer?
我有3个切换按钮。我有它的工作,当点击它会播放一个声音,按钮会切换到“停止”。当声音结束时,如果您在播放时单击“停止”,它将切换回“播放”。声音将停止并切换回 然而,我的问题是,如果我点击两个按钮,它们都在播放,我无法停止前一个按钮。这是因为我无法访问以前的mediaPlayer,只能访问当前的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;
@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的按钮的引用,并在停止播放音频时将其更改回原来的位置即可。