我尝试制作一个简单的媒体播放器,但暂停按钮不起作用。当我点击暂停按钮时,它会停止,但当我再次点击播放时,它会再次从头开始。
我不知道如何制作一个可以播放/暂停按钮的按钮。
我目前的代码:
谢谢!
答案 0 :(得分:1)
您需要保存媒体播放器的当前位置和restart it later from that position using seekTo
。
类似的东西:
int currentPos = 0;
pause.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mediaPlayer.isPlaying()) {
currentPos = mediaPlayer.getCurrentPosition();
mediaPlayer.pause();
//change image to play
} else {
mediaPlayer.seekTo(currentPos);
mediaPlayer.start();
//again revert image to pause
}
}
});
希望它有所帮助。
答案 1 :(得分:0)
这是运行测试和运行代码,您可以使用它暂停并恢复媒体播放器。
int length=0;
Button pause = (Button) findViewById(R.id.pause);
pause.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
length=mediaPlayer.getCurrentPosition();
} else {
mediaPlayer.seekTo(length);
mediaPlayer.start();
}
}
});
答案 2 :(得分:0)
我有一个类似的问题,但是我无法使用上述方法恢复它。
我发现我的pauseAllSounds()函数正在暂停我的声音池中的所有MediaPlayer实例,即使它们尚未播放。发生这种情况时,它会在每个实例中引起一个错误,导致该实例以后无法再次播放。一段时间后,我才发现此问题,原因是正在运行的过程中在控制台输出中查找原因。它逐行显示错误,表明我正试图从无效状态暂停。
dec := xml.NewDecoder(strings.NewReader(data))
var start, end int64
for {
start = dec.InputOffset()
t, err := dec.Token()
if err != nil {
if err != io.EOF {
fmt.Println(err)
}
break
}
if se, ok := t.(xml.StartElement); ok {
if se.Name.Local != "Useful" {
continue
}
if err := dec.Skip(); err != nil {
fmt.Println(err)
break
}
end = dec.InputOffset()
break
}
}
fmt.Println(data[start:end])
我将测试添加为仅在已经播放的情况下暂停,一切正常。