Android 如何停止播放1和播放2
我有一个简单的应用程序,但它似乎不是很简单。我想做的是:当我按下按钮1播放歌曲1时,如果我按下按钮2,那么歌曲1停止,歌曲2播放 如果我只有两个按钮和两首歌曲,我就可以做到这一点,但如果我有更多的按钮和歌曲,我怎么能做到呢? 这是我的密码Android 如何停止播放1和播放2,android,nullpointerexception,media-player,Android,Nullpointerexception,Media Player,我有一个简单的应用程序,但它似乎不是很简单。我想做的是:当我按下按钮1播放歌曲1时,如果我按下按钮2,那么歌曲1停止,歌曲2播放 如果我只有两个按钮和两首歌曲,我就可以做到这一点,但如果我有更多的按钮和歌曲,我怎么能做到呢? 这是我的密码 private MediaPlayer mp1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)
private MediaPlayer mp1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button Bot1 = (Button) findViewById(R.id.button1);
Button Bot2 = (Button) findViewById(R.id.button2);
Button Bot3 = (Button) findViewById(R.id.button3);
Button Bot4 = (Button) findViewById(R.id.button4);
Bot1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(mp1.isPlaying()) {
mp1.stop();}
else
{ if (mp1.isPlaying()){
mp1.stop();
mp1.release(); }
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.bath);
mp1.start();
}
}
});
Bot2.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(mp1.isPlaying()) {
mp1.stop();}
else
{ if (mp1.isPlaying())
mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.flush);
mp1.start();}
}
});
Bot3.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(mp1.isPlaying()) {
mp1.stop();}
else
{if (mp1.isPlaying())
mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.tolflush);
mp1.start();}
}
});
Bot4.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(mp1.isPlaying()) {
mp1.stop();}
else
{ if (mp1.isPlaying())
mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.tolflushs);
mp1.start();
} }
});
mp1 = MediaPlayer.create(this, R.raw.tolflushs);
}
为了避免NullPointerException,如果mp实例不是空的,您可以在您的条件下进行测试。
如果((mp1!=null)&&mp1.isPlaying())
,如果您想用多个媒体播放器管理多个按钮,您可以使用一个映射。当您按下按钮1
mp2.stop();mp3.stop();mp4.stop();
已调用,但尚未创建这些媒体播放器。这就是为什么会出现空指针异常
实例化OnClickListener
s之外的所有MediaPlayer
另外,我建议不要使用4台MediaPlayer,因为这样会浪费资源。仅创建一个按钮,每次单击按钮时,检查按钮是否正在播放、停止、释放并重新创建:
if (mp1.isPlaying())
mp1.stop();
mp1.release();
mp1 = MediaPlayer.create(getApplicationContext(), R.raw.flush);
好的,我解决了nullpointexception,之后我得到了一个非法状态异常,现在我让播放器工作。我知道问题出在哪里,我知道代码是基于逻辑的,但当时我的逻辑效率不高,我睡着了,第二天早上我脑子里就有了答案:)
就这些,现在如果我有10个按钮和10首不同的歌曲,我可以播放我想要的歌曲,上一首歌曲将停止播放。即使我按下相同的按钮,它也将停止播放。我添加了if代码,而不是mp1.stop();mp3.stop();mp4.stop();并删除了2,3,4个播放器。它不想播放,我得到NullPointerException您还需要在
onClickListener
s的外部实例化MediaPlayer。在onCreate()的末尾添加mp1=MediaPlayer.create(…)
行
too.ok,现在它工作了,但是当我按下另一个按钮时,它就停止了Sound1,如果我再按一次它就会开始播放Sound2man..看看你写的:if(mp1.isplay()){mp1.stop();}else{if(mp1.isplay())这会执行吗?我想你不明白我的意思,我想如果我按下按钮1,声音1应该播放,如果我再次按下,声音1会停止,但如果我不停止,我按下按钮2,声音1应该停止,声音2应该播放,这段代码应该适用于所有按钮:(
if (mp1.isPlaying()) { mp1.stop(); mp1.reset();}else
if (mp2.isPlaying()){ mp2.stop(); mp2.reset();}else
if (mp3.isPlaying()){ mp3.stop(); mp3.reset();}else
if (mp4.isPlaying()){ mp4.stop(); mp4.reset();}else{ mp1.reset();
public void onClick(View v) {
if(mp4.isPlaying()) {
mp4.stop();}
else
{
stopPlayers();
mp4 = MediaPlayer.create(getApplicationContext(), R.raw.tolflushs);
mp4.start();
} }
});
}