Android VideoView OnCompletionListener无法正常工作

时间:2012-01-23 21:17:16

标签: android android-videoview

我正在尝试实现一个简单的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'文件。请帮忙

2 个答案:

答案 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();
               }
     });