#android
#Android
Вопрос:
Я записал аудио и воспроизвожу его через медиаплеер. Запись, воспроизведение работает нормально. Я использовал панель поиска при воспроизведении записанного голоса. Я использовал следующую кодировку для воспроизведения содержимого, хранящегося на sdcard. Все работает нормально.. mFileName — это аудиофайл на sdcard. Панель поиска не перемещается во время воспроизведения. Есть предложения…
private void startPlaying()
{
MediaPlayer mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(mFileName);
mPlayer.prepare();
mPlayer.start();
mSeekBar.setMax(mPlayer.getDuration());
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
}
И я использовал
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
if(fromUser){
mPlayer.seekTo(progress);
mSeekBar.setProgress(progress);
}
}
});
Thread currentThread = new Thread((Runnable) this);
currentThread.start();
public void run() {
// TODO Auto-generated method stub
try {
while(mPlayer != null){
int currentPosition = mPlayer.getCurrentPosition();
Message msg = new Message();
msg.what = currentPosition;
threadHandler.sendMessage(msg);
}
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Handler threadHandler = new Handler(){
public void handleMessage(Message msg){
mSeekBar.setProgress(msg.what);
}
};
Панель прогресса перемещается только при перемещении пользователя. Она не перемещается атомарно.
Ответ №1:
Панель поиска не собирается волшебным образом обновляться, чтобы показывать текущее положение медиаплеера. Вот ссылка, которая показывает, как это сделать с помощью потока опроса, который проверяет положение медиаплеера примерно каждую секунду и соответствующим образом обновляет панель поиска:
http://united-coders.com/nico-heid/an-android-seekbar-for-your-mediaplayer
Комментарии:
1. Я тоже это реализую. Но это не работает. Смотрите, как редактируется код.
2. Ваш
run()
метод реализован не так, как в примере.Thread.sleep
должно быть внутриwhile
цикла, а не после него. Сначала попробуйте заставить связанный образец работать правильно, а затем начните изменять пример кода в нужном вам направлении.