调用MediaStore.ACTION_VIDEO_CAPTURE时出错

时间:2012-01-25 13:22:28

标签: android video-capture mediastore

我正在尝试创建一个允许录制视频的应用。我知道使用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中没有显示任何细节。

3 个答案:

答案 0 :(得分:3)

我意识到我得到了错误,因为我正在增加额外费用。我真正需要做的是

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

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

@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();
        }
    }
}
这样,我可以得到文件的名称,并用它进行修改(例如重命名)。

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

答案 1 :(得分:0)

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

答案 2 :(得分: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" />

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