Seekbar на Android не двигается автоматически

Я хотел создать seekBar, который отслеживает прогресс медиаплеера, но он не очень хорошо работает, музыка играет, но поиск остается бездействующим. Есть ли что-то, что я забыл?

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); seekBar = (SeekBar) findViewById(R.id.seekBar1); seekBar.setOnSeekBarChangeListener(this); } public void onClick(View v){ if(v == stopButton){ mediaPlayer.pause(); }else if(v == startButton){ mediaPlayer.start(); run(); }else if(v == quitButton ){ mediaPlayer.stop(); mediaPlayer.release(); } } public void run() { int currentPosition= 0; int total = mediaPlayer.getDuration(); while (mediaPlayer.isPlaying()) { currentPosition= mediaPlayer.getCurrentPosition(); seekBar.setProgress(currentPosition); } } 

В учебном пособии по созданию Android Audio Player см. Раздел « Обновление прогресса SeekBar и таймера»

 /** * Update timer on seekbar * */ public void updateProgressBar() { mHandler.postDelayed(mUpdateTimeTask, 100); } /** * Background Runnable thread * */ private Runnable mUpdateTimeTask = new Runnable() { public void run() { long totalDuration = mp.getDuration(); long currentDuration = mp.getCurrentPosition(); // Displaying Total Duration time songTotalDurationLabel.setText(""+utils.milliSecondsToTimer(totalDuration)); // Displaying time completed playing songCurrentDurationLabel.setText(""+utils.milliSecondsToTimer(currentDuration)); // Updating progress bar int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration)); //Log.d("Progress", ""+progress); songProgressBar.setProgress(progress); // Running this thread after 100 milliseconds mHandler.postDelayed(this, 100); } }; /** * * */ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { } /** * When user starts moving the progress handler * */ @Override public void onStartTrackingTouch(SeekBar seekBar) { // remove message Handler from updating progress bar mHandler.removeCallbacks(mUpdateTimeTask); } /** * When user stops moving the progress hanlder * */ @Override public void onStopTrackingTouch(SeekBar seekBar) { mHandler.removeCallbacks(mUpdateTimeTask); int totalDuration = mp.getDuration(); int currentPosition = utils.progressToTimer(seekBar.getProgress(), totalDuration); // forward or backward to certain seconds mp.seekTo(currentPosition); // update timer progress again updateProgressBar(); } 
Intereting Posts
Maven + AndroidAnnotations сгенерированные, но недоступные классы Облачные сообщения Google: значение полезной нагрузки всегда строка Чтение XML-файла с SDK Какие ненужные плагины Phonegap для удаления в приложении? Можем ли мы записывать данные GPS в CSV-файл, когда вы получаете GPS-данные в Android? Установите apk из другой программы Слияние манифеста Android не подходит для получателей с одинаковым именем, но с другим контентом Как получить последний список вызовов и список избранного в android? Вызов DeleteLocalRef в собственном интерфейсе Java Каковы плюсы и минусы для jumboMode (dexOptions) Живой фон Эффект пульсации воды Любой, кто автоматизировал функционирование камеры мобильного телефона. Любые предложения, где я могу проверить изображение, снятое камерой? Каков трюк с 0dip layout_height или layouth_width? Запретить строку состояния для появления андроида (изменено) Как отключить / включить jackson SerializationFeature.WRAP_ROOT_VALUE?