Android 搜索栏不会随着音轨的运行而移动。无法调试

Android 搜索栏不会随着音轨的运行而移动。无法调试,android,android-mediaplayer,android-seekbar,Android,Android Mediaplayer,Android Seekbar,跟踪Youtube教程。但我的搜索栏不随音频移动。根据教程,我添加了处理程序和runnable to。我错了什么吗 private MediaPlayer music; Handler handler; Runnable runnable; SeekBar seek; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCont

跟踪Youtube教程。但我的搜索栏不随音频移动。根据教程,我添加了处理程序和runnable to。我错了什么吗

private MediaPlayer music;
Handler handler;
Runnable runnable;
SeekBar seek;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler = new Handler();
    Button play = (Button) findViewById(R.id.play);
    Button pause = (Button) findViewById(R.id.pause);
    music = MediaPlayer.create(this, R.raw.gnr_sweet);
    seek = (SeekBar)  findViewById(R.id.seekBar);
    seek.setMax(music.getDuration());
    playCycle();
    seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean userinput) {
            if(userinput){
                music.seekTo(progress);
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

        }
    });
}
public void playCycle(){
    seek.setProgress(music.getCurrentPosition());
    if(music.isPlaying()){
        runnable= new Runnable() {
            @Override
            public void run() {
                playCycle();
            }
        };
        handler.postDelayed(runnable, 1000);
    }
}
我对android开发有点陌生,所以任何类型的输入都是有用的。 我是否缺少playCycle()方法中的某些内容? 还有一个clicklistener for play pause按钮,我刚刚从stackoverflow干净代码的代码段中删除了它

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean userinput) {
    // if(userinput){
        music.seekTo(progress);
    // }
}
进度条更改

public void playCycle(){
    int mCurrentPosition = mMediaPlayer.getCurrentPosition() / 1000;
    seek.setProgress(mCurrentPosition);
    if(music.isPlaying()){
        runnable= new Runnable() {
            @Override
            public void run() {
                playCycle();
            }
        };
        handler.postDelayed(runnable, 1000);
    }
}
试试这个

  mediaPlayer.seekTo((int) length);
        mediaPlayer.start();

        startTime = mediaPlayer.getCurrentPosition();
        finalTime = mediaPlayer.getDuration();

        seekbar.setMax((int) finalTime);

        handler.postDelayed(runnable, 100);

 @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    if (fromUser) {
        if (mediaPlayer == null) {
            seekBar.setProgress(progress);
        } else {
            mediaPlayer.seekTo(progress);
            seekbar.setProgress(progress);
        }
        length = progress;
    }

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}


它对我很有效

就我而言,我创建了一个Runnable。 然后,我认为在调用handler.postdayed之前,需要先设置seekBar.setProgress。这对我来说很有效

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        displayCurrentTime();
        seekBar.setProgress((int) player.getCurrentTimeMillis());
        mHandler.postDelayed(this, 100);
    }

谢谢你的回复。移除条件后,无任何更改。搜索栏在被移动的位置仍然保持静止。@VinayRathod我面临SeekBar的问题,你能帮我吗。。。这是我的问题,有点困惑,请再详细一点?你是我的救世主,非常感谢:)嘿,我在看同一个视频,被卡住了。你的问题帮助了我,谢谢
private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        displayCurrentTime();
        seekBar.setProgress((int) player.getCurrentTimeMillis());
        mHandler.postDelayed(this, 100);
    }