Android Mediaplayer在一段时间后停止工作
我有一个音板,一切都很好,但当我在按钮上点击了一段时间后,声音就停止播放了。。代码如下:Android Mediaplayer在一段时间后停止工作,android,button,audio,onclick,media-player,Android,Button,Audio,Onclick,Media Player,我有一个音板,一切都很好,但当我在按钮上点击了一段时间后,声音就停止播放了。。代码如下: public class MainActivity extends AppCompatActivity{ //Sounds/Remixes MediaPlayer MediaPlayer sound1, sound2, sound3, sound4, remix1, remix2, remix3, remix4; @Override
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分钟
这是我的应用程序,你可以尝试一下,你会看到有时按钮停止工作:
我找到的唯一解决方案是在每次使用后清理media player,我该怎么做?要在每次使用后清理media player,您应该致电
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
}
});
要在每次使用后清理媒体播放器,您应该致电
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
}
});
你的onClick看起来很奇怪,它们叫别的地方吗?我希望在这句话中看到更多的东西:你的onClick看起来很奇怪,它们在哪里被称为其他?我希望在这句话中能看到更多的东西:@AaronWaller不,在确定停止或完成之后请给我一个例子,我不明白它是因为我在Android Studio中是新的。@AaronWaller不,在确定停止或完成之后请给我一个例子,我不明白它是因为我在Android Studio中是新的。