Android自定义视频捕获文件路径不起作用

时间:2011-03-16 14:03:11

标签: android video filenames video-capture android-intent

我正在使用应该使用意图启动相机应用程序的应用程序;相机以图片或视频模式启动,到目前为止它可以工作并将生成的文件保存在SD卡中。现在的问题是,虽然指定一个新的自定义文件名适用于图片意图,但它似乎不适用于摄像机的意图;事实上,EXTRA_OUTPUT或简单的“输出”似乎在视频意图中被忽略了。我使用以下代码:

对于图片(所有作品都很奇怪,包括使用自定义文件名保存图片)

// makes new unique filenames like Picture_03161185528.jpg
fileName = makeFileName("Picture")+".jpg";
path = (new StringBuilder()).
            append(Environment.getExternalStorageDirectory()).
            append("/"+fileName).toString();
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("output", outputFileUri);        
mainActivity.startActivityForResult(intent, CAMERA_RESULT);  

对于视频(它需要视频BUT总是使用默认名称,如VIDEO001,VIDEO002等,而不是我需要的自定义文件名)

// makes new unique filenames like Video_03161185528.3gp        
fileName = makeFileName("Video")+".3gp";
// even tried this hardwired filename...but nothing
fileName = "video.3gp";
path = (new StringBuilder()).
            append(Environment.getExternalStorageDirectory()).
            append("/"+fileName).toString();
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
// seems to be ignored, the file always get saved under default filename
intent.putExtra("output", outputFileUri);      
// same as previous line...seems to be ignored
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
mainActivity.startActivityForResult(intent, VIDEO_RESULT);

在任何情况下,图片意图使用我的自定义文件名保存图片,但视频意图明显忽略它并始终使用默认文件名保存文件。我的问题是:

a)有什么办法可以使用自定义文件名来完成这项工作吗? b)或者有没有办法知道正确的下一个可用的默认文件名? c)或者还有其他方法可以知道哪个文件被创建然后重命名它?

干杯谢谢!

亚兰

1 个答案:

答案 0 :(得分:0)

我在mediastore中插入一行,在调用intent之前给了我未来视频的uri。获得uri后,您可以对文件进行任何操作。

ContentValues values = new ContentValues();  
values.put(MediaStore.Video.Media.TITLE, "video name");                                 
values.put(MediaStore.Images.Media.DATE_TAKEN,System.currentTimeMillis());                  
//videoUri = mediastore path    
videoUri = CaptureContentFragment.this.getActivity().getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);                  
//create new Intent                     
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 20);
CaptureContentFragment.this.getActivity().startActivityForResult(intent, TabsActivity.VIDEO_REQUEST_CODE);