Android SeekBar进度无法正常工作? [英] Android SeekBar progress is not working?

查看:83
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆