Показать время воспроизведения, оставшееся время воспроизведения - PullRequest
3 голосов
/ 01 июня 2011

Я использую следующий код для воспроизведения записанного аудиофайла, он работает нормально.У меня есть панель поиска, которая показывает ход игры.У меня есть два статических текста под названием начало и конец.Мне нужно показать продолжительность игры (от 00.00 до максимальной продолжительности) в начальном тексте и уменьшить время от максимальной продолжительности до 00.00.Мне нужно показать прогрессирующее время, оставшееся время ... Любое предложение ..

private void playAudio() {
        // TODO Auto-generated method stub
        start.setVisibility(View.VISIBLE);
        end.setVisibility(View.VISIBLE);
        Context context = getApplicationContext();
        CharSequence text1 = "Your audio will play";
        int duration = Toast.LENGTH_SHORT;
        Toast toast1 = Toast.makeText(context, text1, duration);
        toast1.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
        toast1.show();</p>

<code>    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);

}
</code>

Ответы [ 2 ]

4 голосов
/ 02 июня 2011

вы не можете обновить пользовательский интерфейс в потоке. Вы можете опубликовать их в 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();
3 голосов
/ 01 июня 2011

за каждую 1 секунду вы можете обновить индикатор выполнения по формуле (mPlayer.getCurrentPosition()/mPlayer.getDuration)*100;

аналогичным образом вы можете получить оставшееся время, используя mPlayer.getDuration-mPlayer.getCurrentPosition();

вы можете получить getDuration () вашего аудиофайла в onPreparedListener ...

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

...