Android SeekBar进度无法正常工作? [英] Android SeekBar progress is not working?
本文介绍了Android SeekBar进度无法正常工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试向从Internet流传输的媒体播放器中添加搜索栏.但是,由于某种原因,它无法正常工作.我正在使用处理程序每秒更新一次UI.这是我底部的代码:
I am trying to add a seekbar to a media player that streams from the internet. However, for some reason it is not working. I am using a handler to update the UI every second. Here is my code at the bottom:
public class MainActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
boolean isPrepared = false;
ImageButton imageButton;
Handler handler;
SeekBar seekBar;
TextView notifying;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
imageButton = (ImageButton) findViewById(R.id.imageButton);
seekBar = (SeekBar) findViewById(R.id.seekBar);
notifying = (TextView) findViewById(R.id.notifying);
handler = new Handler();
final Runnable runnable = new Runnable() {
@Override
public void run() {
if (mediaPlayer != null) {
int mCurrentPosition = mediaPlayer.getCurrentPosition() / 1000;
Log.i("message", mCurrentPosition + "");
seekBar.setProgress(mCurrentPosition);
}
handler.postDelayed(this, 1000);
}
};
handler.postDelayed(runnable, 1000);
try {
mediaPlayer.setDataSource("Any mp3 souund from the internet");
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.i("message", "prepared");
isPrepared = true;
}
});
mediaPlayer.prepareAsync();
seekBar.setMax(mediaPlayer.getDuration());
}
public void play(View view) {
if (!mediaPlayer.isPlaying() && isPrepared == true) {
Log.i("message", isPrepared + "");
Log.i("message", mediaPlayer.isPlaying() + "");
Log.i("message", (mediaPlayer.getDuration() / 1000) / 60 + "");
mediaPlayer.start();
imageButton.setImageResource(R.drawable.pause);
} else {
mediaPlayer.pause();
imageButton.setImageResource(R.drawable.play);
}
}
public void stop(View view) {
if (mediaPlayer != null & mediaPlayer.isPlaying()) {
mediaPlayer.pause();
mediaPlayer.seekTo(0);
imageButton.setImageResource(R.drawable.play);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
推荐答案
不确定,请尝试以下操作:
Im not sure but try this:
将此行放入preperalistener回调中
put this line inside preperalistener callback
seekBar.setMax(mediaPlayer.getDuration());
像这样:
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.i("message", "prepared");
isPrepared = true;
seekBar.setMax(mediaPlayer.getDuration());
}
});
我也相信 int mCurrentPosition = mediaPlayer.getCurrentPosition()/1000;
您不应该除以1000.
Also I believe here int mCurrentPosition = mediaPlayer.getCurrentPosition() / 1000;
you should not divide by 1000.
else seekBar.setMax(mediaPlayer.getDuration()/1000);
这篇关于Android SeekBar进度无法正常工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文