2012-01-25 42 views
0

我试图创建一个允许视频录制的应用程序。我知道使用MediaStore.ACTION_IMAGE_CAPTURE,它实际上是从我的应用程序调用相机系统,拍完照片后它会返回到我的应用程序并显示结果。错误调用MediaStore.ACTION_VIDEO_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); 
当我运行一个真正的设备应用

,它调用视频模式下,相机还可以录像。然而,当我按下录制按钮完成录制时,它会返回我的应用程序,并显示强制关闭消息,说相机没有响应。

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

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

+0

添加你的代码和onActivityResult方法? –

+0

@Samir嗨,我已经添加了调用视频的总代码。 – Jovi

回答

3

我意识到我得到了错误,因为我增加了额外的东西。我只是需要做的是

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

然后,添加一个onActivityResult,与请求代码== 1111(取决于你输入的内容),以及获取最后一次修改文件,该文件包含从扩展名为” .mp4" 的相机“DCIM /摄像机”的默认文件夹

@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(); 
     } 
    } 
} 

这种方式,我可以得到该文件的名称,也做了修改(例如,重命名)它。

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

0

请加上你的logcat。 对于视频拍摄,我使用MediaRecorder类,我建议你使用这个。 如果你有兴趣,我可以给你正确的代码。

+0

logcat中没有任何东西。谢谢,但我跳到使用一个简单易懂的代码,我知道,因为我知道,MediaRecorder似乎是一个复杂的。 – Jovi

+0

不,使用MediaRecorder非常简单,如果您尝试它,我会发布一个例子。 –

+0

当然...谢谢! – Jovi

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" /> 

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

+0

erm ...呃...你提供的代码包含错误,说我没有变量。我可以知道你在哪里得到它(例如MEDIA_TYPE_VIDEO) – Jovi

+0

public static final int MEDIA_TYPE_VIDEO = 2; –

+0

嗨,你在哪里得到getOutputMediaFileUri方法?是不是可以告诉我我的代码出了什么问题?谢谢 – Jovi