Ottieni il tempo di avanzamento del video riprodotto in videovideo?

Ho bisogno di get il tempo di avanzamento del video che viene riprodotto in "VideoView" (vale a dire il tempo indicato nel lato sinistro nella barra di avanzamento).

Qualsiasi aiuto sarà davvero apprezzato. Grazie.

  • listview non aggiornare con notifydatasetchanged () chiamata
  • HttpURLConnection responsecode è random -1
  • Errori di Logcat durante l'esecuzione dell'emulatore android
  • Come posso modificare il colore della freccia di azione della freccia?
  • Android Drive API: get Sys.err UserRecoverableAuthIOException se unisco codice ad altri progetti
  • Come analizzare con GSON quando l'identificatore ha spazio nel nome
  • 4 Solutions collect form web for “Ottieni il tempo di avanzamento del video riprodotto in videovideo?”

    È ansible get la durata del video da mVideoView.getDuration() , impostare la barra di progressione su 0 inizialmente e quindi get la corrente di video di mVideoView.getCurrentPosition(); e aumentare lo stato della barra di avanzamento in base al CurrentProgress di video in percentuale (%) per (current * 100 / duration) . Ho provato ad AsyncTask usando il checkout AsyncTask questo esempio completo.

    main.xml

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <VideoView android:id="@+id/my_Video_View" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ProgressBar android:layout_alignParentBottom="true" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="fill_parent" android:layout_height="10dp" android:id="@+id/Progressbar"/> </RelativeLayout> 

    VideoPlayActivity.java

     public class VideoPlayActivity extends Activity { ProgressBar mProgressBar; VideoView mVideoView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String path = Environment.getExternalStorageDirectory().toString(); String filename = "/hr.3gp"; mProgressBar = (ProgressBar) findViewById(R.id.Progressbar); mProgressBar.setProgress(0); mProgressBar.setMax(100); mVideoView = (VideoView) findViewById(R.id.my_Video_View); mVideoView.setVideoURI(Uri.parse(path+filename)); new MyAsync().execute(); } private class MyAsync extends AsyncTask<Void, Integer, Void> { int duration = 0; int current = 0; @Override protected Void doInBackground(Void... params) { mVideoView.start(); mVideoView.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { duration = mVideoView.getDuration(); } }); do { current = mVideoView.getCurrentPosition(); System.out.println("duration - " + duration + " current- " + current); try { publishProgress((int) (current * 100 / duration)); if(mProgressBar.getProgress() >= 100){ break; } } catch (Exception e) { } } while (mProgressBar.getProgress() <= 100); return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); System.out.println(values[0]); mProgressBar.setProgress(values[0]); } } } 

    È ansible utilizzare getCurrentPosition() e getDuration() per calcolare il progresso.

    È ansible utilizzare Thread per questo scopo come sotto:

     videoView.start(); videoView.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer mp) { running = true; final int duration = videoView.getDuration(); new Thread(new Runnable() { public void run() { do{ textView.post(new Runnable() { public void run() { int time = (duration - videoView.getCurrentPosition())/1000; textView.setText(time+""); } }); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } if(!running) break; } while(videoView.getCurrentPosition()<duration); } }).start(); } }); 

    L'ho compiuta in questo modo

     private void playVideo() { setViewNotVisibility(); final String videoSource = "android.resource://" + getPackageName() + File.separator + R.raw.moviiegood; videoView.setKeepScreenOn(true); videoView.setVideoURI(Uri.parse(videoSource)); videoView.setMediaController(null); videoView.setOnCompletionListener(myVideoViewCompletionListener); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { startVideo(); setDuration(); timerCounter(); } } ); } private Timer timer; private void timerCounter(){ timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { updateUI(); } }); } }; timer.schedule(task, 0, 1000); } private int duration = 0; private void setDuration(){ duration = videoView.getDuration(); } private void updateUI(){ if (pbVideoView.getProgress() >= 100) { timer.cancel(); } int current = videoView.getCurrentPosition(); int progress = current * 100 / duration; pbVideoView.setProgress(progress); } 

    Se avete delle domande non esitate a chiedere

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.