Показать время воспроизведения, оставшееся время воспроизведения

Я использую следующий код для воспроизведения записанного аудиофайла, он отлично работает. У меня есть панель поиска, которая показывает ход игры. У меня есть два статических текста под названием начало и конец. Мне нужно показать продолжительность игры (от 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...

добился успеха, дайте мне знать.

Другие вопросы по тегам