Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将seekbar与音频歌曲同步_Android_Audio_Media Player_Seekbar - Fatal编程技术网

Android 将seekbar与音频歌曲同步

Android 将seekbar与音频歌曲同步,android,audio,media-player,seekbar,Android,Audio,Media Player,Seekbar,我正在播放SD卡上的一首歌 它演奏得很好。我尝试实现seekbar,这样当用户移动seekbar时,歌曲会根据搜索栏的位置被转发或重新录制 这是密码 public class ViewAudio extends Activity implements OnSeekBarChangeListener,OnSeekCompleteListener,OnCompletionListener,OnPreparedListener{ @Override public void onCreate(B

我正在播放SD卡上的一首歌

它演奏得很好。我尝试实现seekbar,这样当用户移动seekbar时,歌曲会根据搜索栏的位置被转发或重新录制

这是密码

public class ViewAudio extends Activity implements  OnSeekBarChangeListener,OnSeekCompleteListener,OnCompletionListener,OnPreparedListener{
 @Override
  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.audio_player);

        System.gc();
        Intent i = getIntent();
        Bundle extras = i.getExtras();
        filename = extras.getString("audiofilename");

        try {
            mPlayer.setDataSource(filename);
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            mPlayer.prepare();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        mPlayer.setOnCompletionListener(this);
        mPlayer.setOnPreparedListener(this);
        mPlayer.setOnSeekCompleteListener((OnSeekCompleteListener) this);

        mPlayer.start();

        TextView tv=(TextView) findViewById(R.id.file);
        tv.setText("Playing "+filename);

        seekbar = (SeekBar)findViewById(R.id.seekBar1);
        mPlay = (Button)findViewById(R.id.play);
        mPause = (Button)findViewById(R.id.pause);

        seekbar.setProgress(0);
        seekbar.setOnSeekBarChangeListener(this);
        total = mPlayer.getDuration();

  }
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
        boolean fromUser) {
    Log.d("Progres changed",""+progress);

    if(fromUser){
        mPlayer.seekTo(progress);
        seekbar.setProgress(progress);

    }

}

}
现在,无论我在哪里单击seekbar,歌曲都是从一开始播放的,而不是从我单击的位置播放的。而且它不是根据歌曲移动的

任何人都请帮忙。

我已经解决了。 创建一个线程,每秒检查一次乐曲位置,并根据乐曲位置移动搜索杆

  mediaPos = mplayer.getCurrentPosition();
  mediaMax = mplayer.getDuration();

  seekbar.setMax(mediaMax); // Set the Maximum range of the
  seekbar.setProgress(mediaPos);// set current progress to song's

  handler.removeCallbacks(moveSeekBarThread);
  handler.postDelayed(moveSeekBarThread, 100); //cal the thread after 100 milliseconds


}
  /**
 * The Move seek bar. Thread to move seekbar based on the current position
 * of the song
 */
private Runnable moveSeekBarThread = new Runnable() {
    public void run() {
            if(mplayer.isPlaying()){

            int mediaPos_new = mPlayer.getCurrentPosition();
            int mediaMax_new = mPlayer.getDuration();
            seekbar.setMax(mediaMax_new);
            seekbar.setProgress(mediaPos_new);

            handler.postDelayed(this, 100); //Looping the thread after 0.1 second
    }

    }
};