将视频保存到内部存储

时间:2015-09-26 04:00:23

标签: android video file-io android-gallery internal-storage

我有一个videoView,它播放的视频来自与Android画廊中的视频文件相对应的路径

 VideoView videoView1 = (VideoView)promptsView.findViewById(R.id.videoView09);
            String SrcPath = "/storage/emulated/0/DCIM/Camera/20150824_210148.mp4";
            videoView1.setVideoPath(SrcPath);
            videoView1.requestFocus();
            videoView1.start();

现在,我需要以某种方式将来自此videoView的视频私下存储到我的应用的内部存储中。

我已经设法使用

为照片做到了这一点
public String saveImageToInternalStorage(Bitmap image, String imgRequestedName) {
    ContextWrapper cw = new ContextWrapper(getActivity());
    File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
    File mypath=new File(directory,imgRequestedName+".jpg");
    String loc = mypath.getAbsolutePath();
    FileOutputStream fos = null;
    try {

        fos = new FileOutputStream(mypath);
        image.compress(Bitmap.CompressFormat.JPEG, 70, fos);
        SharedPreferences pref = getActivity().getApplicationContext().getSharedPreferences("MyPref", Context.MODE_PRIVATE);
        final SharedPreferences.Editor editor = pref.edit();
        editor.putInt("totalImageCount",(pref.getInt("totalImageCount",0))+1);
        editor.commit();

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

    return mypath.getAbsolutePath();
}

我如何为视频做相同的操作?

如何从内部存储中读取视频?

4 个答案:

答案 0 :(得分:2)

以下是用于将视频私密保存到内部存储中的代码。 并编写代码以从内部存储器读取视频。 希望这会有所帮助。

//For saving Video...

private void saveVideoToInternalStorage (String filePath) {

    File newfile;

    try {

        File currentFile = new File(filePath);
        String fileName = currentFile.getName();

        ContextWrapper cw = new ContextWrapper(getApplicationContext());
        File directory = cw.getDir("videoDir", Context.MODE_PRIVATE);


        newfile = new File(directory, fileName);

        if(currentFile.exists()){

            InputStream in = new FileInputStream(currentFile);
            OutputStream out = new FileOutputStream(newfile);

            // Copy the bits from instream to outstream
            byte[] buf = new byte[1024];
            int len;

            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }

            in.close();
            out.close();

            Log.v("", "Video file saved successfully.");

        }else{
            Log.v("", "Video saving failed. Source file missing.");
        }



    } catch (Exception e) {
        e.printStackTrace();
    }

}

private void loadVideoFromInternalStorage(String filePath){

    Uri uri = Uri.parse(Environment.getExternalStorageDirectory()+filePath);
    myVideoView.setVideoURI(uri);

}

答案 1 :(得分:0)

使用它的内部存储路径保存视频:

 ContextWrapper cw = new ContextWrapper(getActivity());
 File directory = cw.getDir("vidDir", Context.MODE_PRIVATE);
 File mypath=new File(directory,vidRequestedName+".mp4");

            try {
                FileOutputStream newFile = new FileOutputStream (mypath);
                //path 0 = current path of the video
                FileInputStream oldFile = new FileInputStream (path0);

                // Transfer bytes from in to out
                byte[] buf = new byte[1024];
                int len;
                while ((len = oldFile.read(buf)) > 0) {
                    newFile.write(buf, 0, len);
                }
                newFile.flush();
                newFile.close();
                oldFile.close();

答案 2 :(得分:0)

您应该使用uri。在示例中,我在资源中创建了一个“原始”文件,但您可以根据需要进行修改。

Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.example.mp4);
videoView.setVideoURI(uri);

答案 3 :(得分:0)

使用uuid将视频保存在内部存储中

private void saveVideoToInternalStorage() {
    UUID uuid = UUID.randomUUID();

    try {

        File currentFile = new File(filePath);
        File loc = Environment.getExternalStorageDirectory();
        File directory = new File(loc.getAbsolutePath()+"/FolderNameWhateverYouWant");
        directory.mkdir();
        String fileName = String.format( uuid+".mp4");
        File newfile = new File(directory, fileName);


        if(currentFile.exists()){

            InputStream inputStream = new FileInputStream(currentFile);
            OutputStream outputStream = new FileOutputStream(newfile);

            byte[] buf = new byte[1024];
            int len;

            while ((len = inputStream.read(buf)) > 0) {
                outputStream.write(buf, 0, len);
            }

            outputStream.flush();
            inputStream.close();
            outputStream.close();

            Toast.makeText(getApplicationContext(),"Video has just saved!!",Toast.LENGTH_LONG).show();

        }else{
            Toast.makeText(getApplicationContext(),"Video has failed for saving!!",Toast.LENGTH_LONG).show();
        }


    } catch (Exception e) {
        e.printStackTrace();
    }

}

不要忘记请求权限

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />