为什么 MediaPlayer.getCurrentPoition() 总是 return 与 Android 中的值相同?
Why MediaPlayer.getCurrentPoition() always return the same value in Android?
我正在使用音乐流媒体应用程序。从 Spotify 获取歌曲后,我使用 MediaPlayer 来处理控件。
这是我正在处理的部分代码:
public class LocalPlayerController implements MediaPlayer.OnCompletionListener, SeekBar.OnSeekBarChangeListener {
//...
private LocalPlayerController(){
if(player==null) player = new MediaPlayer();
}
//...
public void play(String path,int songIndex){
if(player!=null) player.stop();
player = new MediaPlayer();
player.setOnCompletionListener(this);
currentSongIndex = songIndex;
try {
player.reset();
player.setDataSource(path);
player.prepare();
player.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//...
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser){
player.seekTo(player.getCurrentPosition()+progress*1000);
}
}
//...
}
到目前为止,它可以很好地再现我扔给它的音乐,但是当我调用 MediaPlayer.getCurrentPosition() 时,它每次都 returns 相同的值,我认为它应该随着自音乐开始播放以来的时间。我需要那个变化的值才能调用 MediaPlayer.seekTo().
发生了什么事?为什么进度不更新?
已解决。
我在 onPreparedListener 实现中调用 player.start() 而不是显式调用它
我正在使用音乐流媒体应用程序。从 Spotify 获取歌曲后,我使用 MediaPlayer 来处理控件。
这是我正在处理的部分代码:
public class LocalPlayerController implements MediaPlayer.OnCompletionListener, SeekBar.OnSeekBarChangeListener {
//...
private LocalPlayerController(){
if(player==null) player = new MediaPlayer();
}
//...
public void play(String path,int songIndex){
if(player!=null) player.stop();
player = new MediaPlayer();
player.setOnCompletionListener(this);
currentSongIndex = songIndex;
try {
player.reset();
player.setDataSource(path);
player.prepare();
player.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//...
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser){
player.seekTo(player.getCurrentPosition()+progress*1000);
}
}
//...
}
到目前为止,它可以很好地再现我扔给它的音乐,但是当我调用 MediaPlayer.getCurrentPosition() 时,它每次都 returns 相同的值,我认为它应该随着自音乐开始播放以来的时间。我需要那个变化的值才能调用 MediaPlayer.seekTo().
发生了什么事?为什么进度不更新?
已解决。
我在 onPreparedListener 实现中调用 player.start() 而不是显式调用它