我想在我的应用程序中使用一个播放按钮,当点击播放音频并更改为暂停时,单击暂停按钮时音频停止,按钮变为再次播放,依此类推。但按钮没有按预期工作。请帮忙。我在下面添加我的java代码。
public class surah extends AppCompatActivity {
MediaPlayer mp = new MediaPlayer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_surah);
mp=MediaPlayer.create(surah.this, R.raw.surahkahf);
final ImageView audio = (ImageView)findViewById(R.id.btn);
audio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mp.isPlaying()){
mp.stop();
audio.setBackgroundResource(R.drawable.play);
try {
mp.prepare();
}catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
mp.start();
audio.setImageResource(R.drawable.pause);
}
}
});
}
}
答案 0 :(得分:0)
首先,正如aborocz在评论中提到的那样,您可能打算暂停播放而不是停止播放,因此您要使用的方法是pause()
。在这种情况下,您不需要再次准备MediaPlayer
,它将从恢复播放时暂停的相同位置开始。
其次,isPlaying()
方法并不特别适合此目的。存在阻止期望行为的竞争条件。来自Android MediaPlayer
documentation:
请注意从Started状态到Paused状态的转换 反之亦然在播放器引擎中异步发生。有可能 在调用isPlaying()之前更新状态需要一些时间, 对于流内容,它可以是几秒钟。
相反,存储您自己的布尔值。
public class surah extends AppCompatActivity {
private MediaPlayer mp;
private boolean isMediaPlaying = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_surah);
mp = MediaPlayer.create(surah.this, R.raw.surahkahf);
final ImageView audio = (ImageView)findViewById(R.id.btn);
audio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isMediaPlaying) {
mp.pause();
audio.setBackgroundResource(R.drawable.play);
isMediaPlaying = false;
} else {
mp.start();
audio.setImageResource(R.drawable.pause);
isMediaPlaying = true;
}
}
});
}
}
答案 1 :(得分:0)
使用 audio.setImageResource(R.drawable.play) 而不是 audio.setBackgroundResource(R.drawable.play)。使用 mp.pause() 而不是 mp.stop();