我正在尝试创建一个允许录制视频的应用。我知道使用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中没有显示任何细节。
答案 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" />
如果您有其他问题,请回复我。