Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助从录制的视频Uri获取文件吗_Java_Android - Fatal编程技术网

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

Java 需要帮助从录制的视频Uri获取文件吗,java,android,Java,Android,我有两项活动活动1打开活动2 Intent intent = new Intent(getContext(), Activity2.class); startActivityForResult(intent, CAMERA_VIDEO_RESULT) Activity2使用MediaRecorder允许用户捕获视频。首先,我在onCreate中准备文件: mRecordedFile = getOutputMediaFile(this, MEDIA_TYPE_VIDEO); 这里使用的方法借

我有两项活动<代码>活动1打开
活动2

Intent intent = new Intent(getContext(), Activity2.class);
startActivityForResult(intent, CAMERA_VIDEO_RESULT)
Activity2
使用
MediaRecorder
允许用户捕获视频。首先,我在
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;
    }
我将其设置为输出
文件

mMediaRecorder.setOutputFile(mrecordFile.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();
Uri uri = data.getData();
因此,回到
Activity1
,我在
onActivityResult
方法中检索这个
Uri
,其中
数据
只是返回
意图

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();
Uri uri = data.getData();
到目前为止,看起来还不错。
Uri
如下所示:

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

最后,我尝试检索它并将其转换回
文件
,因为我需要将其上载到服务器。以下是相关位:

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

此创建的
文件
为空,长度为0。我已经在这件事上撞了好一阵子了,但我觉得我肯定错过了一些明显的东西。有什么建议吗?

你知道,你应该发布所有的代码。可能发生的事情甚至与您发布的代码片段无关。您可能在用户点击停止录制按钮后再次设置输出文件,从而覆盖他们刚刚创建的文件


对不起,伙计们。我的精神问题。请忽略。

“[…]将其转换回文件,因为我需要将其上载到服务器”
-您不需要
文件
-您需要的只是
输入流
,阅读
内容解析程序
API文档,了解如何获取它本身可能不需要
文件
,但即使我将代码的最后一位更改为:
InputStream InputStream=getContext().getContentResolver().openInputStream(uri)
inputStream.available()
读取为0。所以,我想问题一定在别的地方。我是个白痴。这与这些都无关。我在下面发布了原因,并回答了返回“”和0而不是null的原因。