所以我在我的应用程序中放了一个音频文件,当我触摸按钮时,它就会停止播放,当我再次触摸它时停止播放。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button one = (Button) findViewById(R.id.buttonId);
final MediaPlayer mp = new MediaPlayer();
one.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
if(mp.isPlaying())
{
mp.stop();
}
try {
mp.reset();
AssetFileDescriptor afd;
afd = getAssets().openFd("mosq.mp3");
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.prepare();
mp.setLooping(true);
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
这是我的代码,这部分:
if(mp.isPlaying())
{
mp.stop();
}
由于某种原因没有工作。
答案 0 :(得分:2)
请务必在return
下面添加mp.stop()
声明。
从我能理解的声音确实停止但是它再次启动,因为代码的下一部分仍然被执行
答案 1 :(得分:0)
正如George D正确指出的那样,即使你刚刚停止播放,你也会无条件地开始播放媒体。您可以使用他的解决方案或执行以下操作:
if(mp.isPlaying())
{
mp.stop();
}
else {
try {
mp.reset();
AssetFileDescriptor afd;
afd = getAssets().openFd("mosq.mp3");
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.prepare();
mp.setLooping(true);
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
这还有其他几个潜在的错误:
*我不确定这是否是你想要的,但玩家不会暂停,只需从头开始停止并重启。如果您尝试恢复或再次播放,则每次都会完全重新加载音频文件。至少这是浪费资源,而且从UI的角度来看,这可能不是预期的行为
*您不希望将MediaPlayer对象定义为OnCreate方法中的局部变量。这个工作的唯一原因是你有内存泄漏(你永远不会取消订阅你的事件处理程序的点击);如果你没有内存泄漏,一旦你完成onCreate方法,对象就有资格进行垃圾收集,并且就框架而言,它将不再存在。