मुझे "वीडियो व्यू" में खेला गया वीडियो का प्रगति समय प्राप्त करना होगा (यानी प्रगति पट्टी में बाईं ओर दिखाए गए समय)।वीडियोव्यू के तहत खेले गए वीडियो का प्रगति समय प्राप्त करें?
किसी भी मदद की वास्तव में सराहना की जाएगी। धन्यवाद।
मुझे "वीडियो व्यू" में खेला गया वीडियो का प्रगति समय प्राप्त करना होगा (यानी प्रगति पट्टी में बाईं ओर दिखाए गए समय)।वीडियोव्यू के तहत खेले गए वीडियो का प्रगति समय प्राप्त करें?
किसी भी मदद की वास्तव में सराहना की जाएगी। धन्यवाद।
आप mVideoView.getDuration()
द्वारा वीडियो की अवधि प्राप्त कर सकते हैं, शुरू में और फिर 0 पर प्रगति बार सेट mVideoView.getCurrentPosition();
द्वारा वीडियो की currentProgress हो और (current * 100/duration)
द्वारा प्रतिशत (%) में वीडियो की CurrentProgress के आधार पर प्रगति बार स्थिति में वृद्धि । मैंने AsyncTask
चेकआउट इस पूर्ण उदाहरण का उपयोग करके इसे आजमाया।
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]);
}
}
}
प्रगति की गणना के लिए आप getCurrentPosition()
और getDuration()
का उपयोग कर सकते हैं।
लेकिन, ?, उन तरीकों कॉल करने के लिए जब तक मैं यह हर दूसरे ट्रैक करने के लिए की जरूरत है। – NarendraJi
@ एमआर-नरेंद्र, आप टाइमर या धागा नींद सेट 1000 एमएस के साथ ऊपर नोलेश और Aleksey Timoshchenko के उत्तरों का उल्लेख कर सकते हैं। – Karthik
मैंने 'हैंडलर' की मदद से इसे हासिल किया। – NarendraJi
आप इस उद्देश्य के नीचे की तरह के लिए थ्रेड का उपयोग कर सकते हैं:
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();
}
});
से कॉल किया जाना चाहिए परिणामस्वरूप टेक्स्टव्यू में रिसाव – isudansh
मैं इसे इस तरह से पूरा किया
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);
}
आप एक सवाल है, तो पूछने के लिए स्वतंत्र
क्या आप वास्तव में 'mVideoView.start();' 'doInBackground' में कॉल कर सकते हैं? कोई गलती नहीं अपवाद अपवाद? –
हाय ललित। क्या होता है यदि उपयोगकर्ता VideoView से बाहर निकलता है या इसे बंद करता है? असीमित निष्पादन से इस AsyncTask को कैसे रोक सकता है? – codeshark
@ एंड्रॉइड-उपयोगकर्ता आप स्पष्ट रूप से यूआई थ्रेड से अपने AsyncTask –