我有一个音板,一切正常,但是过一会儿我刚停下来播放声音时,在按钮上单击很多,这是代码:
public class MainActivity extends AppCompatActivity{
//Sounds/Remixes MediaPlayer
MediaPlayer sound1, sound2, sound3, sound4, remix1, remix2, remix3, remix4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Sound MediaPlayers
sound1= MediaPlayer.create(this, R.raw.sound1);
sound2= MediaPlayer.create(this, R.raw.sound2);
sound3= MediaPlayer.create(this, R.raw.sound3);
sound4= MediaPlayer.create(this, R.raw.sound4);
//Remixes MediaPlayer
remix1= MediaPlayer.create(this, R.raw.remix1);
remix2= MediaPlayer.create(this, R.raw.remix2);
remix3= MediaPlayer.create(this, R.raw.remix3);
remix4= MediaPlayer.create(this, R.raw.remix4);
}
//Songs stop playing when closing/switching the App
@Override
protected void onPause() {
remix1.pause();
remix2.pause();
remix3.pause();
remix4.pause();
super.onPause();
}
//Remix onClick's
public void remix1(View view){
if(remix1.isPlaying() == true){
remix1.pause();
}else{
remix1.start();
}
}
public void remix2(View view){
if(remix2.isPlaying() == true){
remix2.pause();
}else{
remix2.start();
}
}
public void remix3(View view){
if(remix3.isPlaying() == true){
remix3.pause();
}else{
remix3.start();
}
}
public void remix4(View view){
if(remix4.isPlaying() == true){
remix4.pause();
}else{
remix4.start();
}
}
//sound onClick's
public void sound1(View view){
sound1.start();
}
public void sound2(View view){
sound2.start();
}
public void sound3(View view){
sound3.start();
}
public void sound4(View view){
sound4.start();
}
}
这是我的代码,只有4种声音和4种混音。
声音长3秒,重新混音3分钟。
这是我的应用程序,您可以尝试一下,并且有时按钮会停止工作:https://play.google.com/store/apps/details?id=com.aaron.waller.angelasoundboard
我发现的唯一解决方案是每次使用后都要清理MediaPlayer,我该怎么办?
您的onClick看起来很奇怪,在别的地方叫它们吗? 我希望能看到更多的信息:stackoverflow.com/questions/18459122/
要在每次使用后清理媒体播放器,请致电
mediaPlayer.release();
但是,如果您需要的只是将create方法之后的mediaPlayer返回其状态。
mediaPlayer.reset();
应该足够了
UPD
对于您的情况,请为您使用的每个mediaPlayer将此代码添加到onCreate。
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.reset();
//if reset doesnt give you what you need use mp.release() instead
//but dont forget to call MediaPlayer.create
//before next mediaPlayer.start() method
}
});
像这样? pastebin.com/KPVhJUzt
@AaronWaller否,确定停止后或onCompletion之后
请举一个例子,因为Android Studio中的新功能,所以我没有得到它。

1705

被折叠的 条评论
为什么被折叠?



