我正在尝试实现一个简单的VideoView,它将从文件系统播放视频。视频加载很好,播放得很好。但是,我想知道视频何时完成播放,以便我可以完成()活动并继续播放。这就是我所拥有的。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/videoPlayer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true"
android:orientation="vertical" >
<VideoView
android:id="@+id/videoView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
活动如下。
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.videoplayer);
videoView = (VideoView) findViewById(R.id.videoView);
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
Intent result = new Intent();
setResult(1, result);
finish();
}
}); // video finish listener
Intent intent = getIntent();
// Receiving the Data
String fileName = intent.getStringExtra("fileName");
videoView.setVideoPath(fileName);
videoView.setMediaController(new MediaController(this));
videoView.requestFocus();
videoView.start();}
我从另一个Activity调用此Activity。这是活动定义。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:keepScreenOn="true">
<ImageView
android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:contentDescription="@string/imageViewDescription" />
</LinearLayout>
VideoPlayer活动类
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.imageplayer);
imageView = (ImageView) findViewById(R.id.imageView);
updateUI(new File("/sdcard/Test/Test.3gp");
}
public void updateUI(File file)
{
if (file.getName().toLowerCase().endsWith(".jpg") || file.getName().toLowerCase().endsWith(".png"))
{
Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
imageView.setImageBitmap(myBitmap);
}
else if (file.getName().toLowerCase().endsWith(".3gp") || file.getName().toLowerCase().endsWith(".mp4"))
{
//Starting a new Intent
Intent nextScreen = new Intent(getApplicationContext(), VideoPlayer.class);
//Sending data to another Activity
nextScreen.putExtra("fileName", file.getAbsolutePath());
released = false;
startActivityForResult(nextScreen, resultCode);
}
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
}
永远不会调用onCompletion方法,也不会调用此Activity调用者的onActivityResult()方法。我想知道这有什么问题。我尝试使用相同的结果播放'.3gp'和'.mp4'文件。请帮忙
答案 0 :(得分:1)
好吧,既然我没有在这里得到任何回应,我尝试了很多不同的方法,最后运气好了。我没有让Image Viewer Activity调用Video Player活动,而是创建了一个没有任何UI的空白活动。我遍历此活动中的文件,然后通过将文件名作为参数传入Intent来调用Image Viewer Activity或Video Player活动。这工作正常,没有问题。希望有人回答为什么以前的实施不起作用。
答案 1 :(得分:1)
在onPreparedListener中调用videoView.start()并使用false值设置mediaplayer对象循环。我希望这会有效.. 如下所示:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.setLooping(false); //make sure to use this statement
video.start();
Toast.makeText(mContext,String.valueOf(vtime),Toast.LENGTH_LONG).show();
}
});