0

我正在尝试创建一个允许视频录制的应用程序。我知道使用 MediaStore.ACTION_IMAGE_CAPTURE,它实际上是从我的应用程序调用相机系统,拍照后,它会返回我的应用程序并返回结果。

在使用代码时,我发现了一个 MediaStore.ACTION_VIDEO_CAPTURE。我认为它会相机,但在视频模式下,而不是图像捕捉模式。

我用于在视频模式下调用相机的代码:

Intent takeVideoFromCameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
Uri mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "/Record/vid_"+ String.valueOf(System.currentTimeMillis()) + ".mp4"));
takeVideoFromCameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mUri);
startActivityForResult(takeVideoFromCameraIntent, RESULT_OK);

当我使用真实设备运行该应用程序时,它会以视频模式调用相机并允许视频录制。但是,当我按下录制按钮完成录制时,它会返回到我的应用程序并显示强制关闭消息,说明相机没有响应。

一开始,我以为视频没有被捕获,但是当我搜索该文件时,它确实存在。

然后,我认为是我的 onActivityResult 方法导致了问题,但是在我用 /* ... */ 评论它之后,它仍然有同样的问题。但 LogCat 中没有显示任何详细信息。

4

3 回答 3

3

我意识到我得到了错误,因为我正在添加额外的内容。我只需要做的是

Intent takeVideoFromCameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(takeVideoFromCameraIntent, 1111);

然后,添加一个 onActivityResult,请求代码 == 1111(取决于您输入的内容)并从相机“DCIM/Camera”的默认文件夹中检索包含扩展名“.mp4”的最后修改文件

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == 1111)//cam
    {
         File folder = new File(Environment.getExternalStorageDirectory(), "/DCIM/Camera");
         long folderModi = folder.lastModified();

    FilenameFilter filter = new FilenameFilter() 
    {
        public boolean accept(File dir, String name) 
        {
            return (name.endsWith(mp4));
        }
    };

    File[] folderList = folder.listFiles(filter);

    String recentName = "";

    for(int i=0; i<folderList.length;i++)
    {
        long fileModi = folderList[i].lastModified();

        if(folderModi == fileModi)
        {
            recentName = folderList[i].getName();
        }
    }
}

这样,我可以获取文件的名称并对其进行修改(例如重命名)。

希望这对其他人有帮助。=)

于 2012-02-01T08:30:44.563 回答
0

请添加您的logcat。对于视频捕获,我使用的是 MediaRecorder 类,我建议你使用它。如果你有兴趣,我可以给你正确的代码。

于 2012-01-25T14:28:56.487 回答
0

我认为,使用此代码可以解决您的问题。


//create new Intent

 Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);  // create a file to save the video
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);  // set the image file name

    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high

    // start the Video Capture Intent
    startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);

Use this code in an activity and also set some property in xml file.
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />

如果您还有其他问题,请回复我。

于 2012-01-28T08:48:04.713 回答