Показать время воспроизведения, оставшееся время воспроизведения
Я использую следующий код для воспроизведения записанного аудиофайла, он отлично работает. У меня есть панель поиска, которая показывает ход игры. У меня есть два статических текста под названием начало и конец. Мне нужно показать продолжительность игры (от 00.00 до максимальной продолжительности) в начальном тексте и уменьшить время от максимальной продолжительности до 00.00. Мне нужно показать прогрессирующее время, оставшееся время... Любое предложение..
private void playAudio () {
// TODO Автоматически генерируемый метод заглушки
start.setVisibility(View.VISIBLE);
end.setVisibility(View.VISIBLE);
Context context = getApplicationContext();
CharSequence text1 = "Ваш звук будет воспроизводиться";
int duration = Toast.LENGTH_SHORT;
Toast toast1 = Toast.makeText(контекст, текст1, продолжительность);
toast1.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast1.show(); String newFolderName = "/ComAudioRecorder";
String extstoredir = Environment.getExternalStorageDirectory()
.toString();
String filename = "/combinedrecaudio.wav";
String path1 = extstoredir + newFolderName + filename;
Log.d("path1", path1);
/*
* String path=path2; Log.d("path",path);
*/
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(path1);
mPlayer.prepare();
mPlayer.start();
} 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();
}
mSeekBar.setMax(mPlayer.getDuration());
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (mPlayer != null
&& mPlayer.getCurrentPosition() < mPlayer.getDuration()) {
Log.d("Indide Run Method",Integer.toString(mPlayer.getCurrentPosition()));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mSeekBar.setProgress(mPlayer.getCurrentPosition());
start.setText(Long.toString(startTime));
//end.setText(Double.toString());
}
}
}).start();
pos=mPlayer.getCurrentPosition();
mSeekBar.setProgress(mPlayer.getCurrentPosition());
// mPlay.setVisibility(View.INVISIBLE);
pauseRecord.setVisibility(View.INVISIBLE);
resumeRec.setVisibility(View.VISIBLE);
/*start.setText(Double.toString(starttext));
starttext=starttext+00.01;*/
// start.setText((int) (mPlayer.getCurrentPosition()/100000.0));
// end.setText(currentTime);
// start.setText();
// mDelete.setVisibility(View.INVISIBLE);
}
2 ответа
Вы не можете обновить пользовательский интерфейс в теме. Вы можете опубликовать их в Runnable.
в методе run () вставьте следующий код.
mHandler.post(updateUI);
затем используйте обработчик для обновления пользовательского интерфейса
private final Runnable updateUI= new Runnable()
{
public void run()
{
try
{
//update ur ui here
start.setText((mPlayer.getCurrentPosition()/mPlayer.getDuration())*100); end.setText(mPlayer.getDuration()-mPlayer.getCurrentPosition())
}
catch (Exception e)
{
e.printStackTrace();
}
}
};
private final Handler mHandler = new Handler();
За каждую 1 секунду вы можете обновлять индикатор выполнения по формуле (mPlayer.getCurrentPosition()/mPlayer.getDuration)*100;
Точно так же вы можете получить оставшееся время, используя mPlayer.getDuration-mPlayer.getCurrentPosition()
;
вы можете получить getDuration() вашего аудиофайла в onPreparedListener...
добился успеха, дайте мне знать.