需要帮助从录制的视频Uri获取文件

时间:2018-07-13 16:18:34

标签: java android

我有两个活动。 Activity1打开Activity2

Intent intent = new Intent(getContext(), Activity2.class);
startActivityForResult(intent, CAMERA_VIDEO_RESULT)

Activity2使用MediaRecorder允许用户捕获视频。首先,我在File中准备onCreate

 mRecordedFile = getOutputMediaFile(this, MEDIA_TYPE_VIDEO);

此处使用的方法与我创建文件的方式一样,都是从Google的示例中借来的:

 private static File getOutputMediaFile(Context context, int type){
        File mediaStorageDir = new File(context.getExternalFilesDir(
                Environment.DIRECTORY_PICTURES), "MyCameraApp");

        if (! mediaStorageDir.exists()){
            if (! mediaStorageDir.mkdirs()){
                Log.d("MyCameraApp", "failed to create directory");
                return null;
            }
        }

        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File mediaFile;
        if (type == MEDIA_TYPE_IMAGE){
            mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                    "IMG_"+ timeStamp + ".jpg");
        } else if(type == MEDIA_TYPE_VIDEO) {
            mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                    "VID_"+ timeStamp + ".mp4");
        } else {
            return null;
        }

        return mediaFile;
    }

我将其设置为输出File

mMediaRecorder.setOutputFile(mRecordedFile.getAbsolutePath());

用完相机后,这就是返回Intent

Uri uri = Uri.fromFile(mRecordedFile);
String extension = MimeTypeMap.getFileExtensionFromUrl(uri.toString());
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
Intent returnIntent = new Intent();
returnIntent.setDataAndType(uri, mimeType);
setResult(RESULT_OK, returnIntent);
finish();

因此,回到Activity1,我在Uri方法中检索了这个onActivityResult,其中data只是返回值Intent

Uri uri = data.getData();

到目前为止,看起来还不错。 Uri看起来像这样:

file:///storage/emulated/0/Android/data/com.mycameraapp.demo/files/Pictures/MyCameraApp/VID_20180713_091027.mp4

最终,我尝试将其检索并将其转换回File,因为我需要将其上传到服务器。这是相关的位:

 String filePath = uri.getPath();
 File file = new File(filePath);

此创建的File是空白的,长度为0。在此过程中,我一直把头撞在墙上,但是感觉到我一定缺少明显的东西。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您知道,您可能应该发布所有代码。可能发生的事情甚至与您发布的代码无关。您可能会在用户点击停止录制按钮后立即重新设置输出文件,从而覆盖他们刚刚制作的文件。

对不起,伙计们。我的精神毛病。请忽略。