putExtra() 视频

putExtra() video uri

我尝试将视频文件从我的画廊放到另一个 activity 并播放。 我有两个问题。

  1. 当我想选择视频时,在我有可能选择文件之前,我得到了第二个activity。

  2. 我没有找到使用PutExtra()传递文件并在第二个activity中获取它的方法。

这是第一个activity:

   package com.roa.saveandplayvideo;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;

import java.text.SimpleDateFormat;
import java.util.Date;

import java.io.File;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

    public static final String TAG = MainActivity.class.getSimpleName();
    public static final int TAKE_PHOTO_REQUEST = 0;
    public static final int TAKE_VIDEO_REQUEST = 1;
    public static final int PICK_PHOTO_REQUEST = 2;
    public static final int PICK_VIDEO_REQUEST = 3;

    public static final int MEDIA_TYPE_IMAGE = 4;
    public static final int MEDIA_TYPE_VIDEO = 5;

    public static final int FILE_SIZE_LIMIT = 1024*1024*10; // 10MBs

    protected Uri mMediaUri;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Button btn1 = (Button)findViewById(R.id.button1);
        Button btn2 = (Button)findViewById(R.id.button2);
        Button btn3 = (Button)findViewById(R.id.button3);

        //take a video...
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                mMediaUri = getFileUri(MEDIA_TYPE_VIDEO);
                takeVideoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri);
                takeVideoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
                takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
                startActivityForResult(takeVideoIntent,TAKE_VIDEO_REQUEST);

            }
        });
//choose the video
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent chooseVideo = new Intent(Intent.ACTION_GET_CONTENT);
                chooseVideo.setType("video/*");
                startActivityForResult(chooseVideo, PICK_VIDEO_REQUEST);

                Intent playVid = new Intent(MainActivity.this, PlayActivity.class);
                playVid.putExtra("vidFile",chooseVideo);
                startActivity(playVid);

            }
        });



    }

    private Uri getFileUri(int mediaTypeVideo) {
        //get the Uri
        //1. get the external storage directory
        String appName = MainActivity.this.getString(R.string.appName);
        File theFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), appName);

//2.create our subdirectory
        if(!theFile.exists()){
            if(!theFile.mkdir()){
                Log.e(TAG, "Failed to make the directory");
                return  null;
            }
        }
        //3.create the file name
        //4.create the file
        File mediaFile;
        Date now = new Date();
        String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.getDefault()).format(now);
        String path = theFile.getPath() + File.separator;
        mediaFile = new File(path + "VID" + timeStamp + ".mp4");

        return Uri.fromFile(mediaFile);
    }

}

这是第二个activity:

package com.roa.saveandplayvideo;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.VideoView;

public class PlayActivity extends AppCompatActivity {

    private Uri file;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Intent i = getIntent();
        i.getExtra("vidFile", file);


        VideoView vid = (VideoView)findViewById(R.id.videoView1);
        vid.setVideoURI(file);
        vid.start();


    }
}

谢谢。

btn2 设置侦听器时,您将启动两个活动。删除第二个意图。

//choose the video
btn2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent chooseVideo = new Intent(Intent.ACTION_GET_CONTENT);
        chooseVideo.setType("video/*");
        startActivityForResult(chooseVideo, PICK_VIDEO_REQUEST);
    }
});

您需要覆盖 onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==PICK_VIDEO_REQUEST){
        if(resultCode==RESULT_OK){
            Uri vidFile = data.getData();
            Intent playVid = new Intent(MainActivity.this, PlayActivity.class);
            playVid.putExtra("vidFile",vidFile);
            startActivity(playVid);
        }
    }

}

然后在 PlayACtivity 中获取 Uri 并播放视频:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    Intent i = getIntent();
    file = Uri.parse(i.getExtras().get("vidFile").toString());
    VideoView vid = (VideoView)findViewById(R.id.videoView1);
    vid.setVideoURI(file);
    vid.start();
}