从库中导入视频,然后将其保存在另一个文件夹中

时间:2016-12-03 22:39:07

标签: android

我的应用背后的概念可能没有意义,但我只是需要它来展示一些东西 我想做的是:

1 - 从android库中导入视频
2 - 重命名(例如xyz)
3 - 将其保存在不同的文件夹(ABC)

完整路径将是,例如:

 "/storage/emulated/0/Pictures/ABC/XYZ.mp4" 

我设法调用意图显示我将选择目标视频的图库,但我不知道我应该在onActivityResult中写什么?

 gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v,
                            int position, long id) {

            Intent intent = new Intent();
                intent.setType("video/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent,"Select Video"),TAKE_Video);
        }
    }

我在@CommonsWare步骤之后添加了这段代码,但没有任何反应:(

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  if (resultCode == RESULT_OK) {
        if (requestCode == TAKE_Video) {

            File root = new File(Environment.getExternalStorageDirectory(), "/Pictures/Targets/"); ///storage/emulated/0/Directory Name
            if (!root.exists()) {
                root.mkdirs();
            }
            try {

                FileInputStream fis = (FileInputStream) getContentResolver().openInputStream(data.getData());

                File file;
                String newname="newname.mp4";
                file = new File(root,newname);
                FileOutputStream fos = new FileOutputStream(file);
                byte[] buf = new byte[1024];
                int len;
                while ((len = fis.read(buf)) > 0) {
                    fos.write(buf, 0, len);

                }

                fos.flush();
                fos.getFD().sync();
                fos.close();
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }

1 个答案:

答案 0 :(得分:1)

步骤1:在onActivityResult()中,检查请求代码(第一个参数)以查看它是否为RESULT_LOAD_Video,并检查结果代码(第二个参数)以查看它是否为{{1} }}

步骤2:当步骤1中的两个检查均为真时,使用新名称在所需目标文件上创建RESULT_OK

步骤3:致电FileOutputStream,传递getContentResolver().openInputStream()上传递的getData()的值Intent(第3个参数)。

步骤#4:使用Java I / O从步骤#3中获得的onActivityResult()读取字节,并将其写入步骤#2中的InputStream

步骤5:完成复制字节后,分别在FileOutputStream上拨打flush()getFD().sync()close()

步骤#6:当你完成所有这些工作后,将步骤#2-5的代码移到后台线程,因为你不应该在主应用程序线程上进行这种I / O.