2011-02-14 89 views
5

我使用MediaStore.ACTION_VIDEO_CAPTURE intent类来捕捉视频,将视频存储在默认位置(图库),我想用特定名称将视频存储在特定位置。Android MediaStore.ACTION_VIDEO_CAPTURE,外部路径?

我使用MediaStore.EXTRA_MEDIA_TITLEMediaStore.EXTRA_MEDIA_OUTPUT但我没有在正确的位置获得视频,至少我需要录制视频的路径。

在此先感谢。

回答

10

从Zelimir该解决方案不起作用在我的情况(视频位于正确的位置,但大小为零字节)。所以,我已经找到了另一个解决方案:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 

    if (resultCode != RESULT_OK) return; 

    try { 
    AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(intent.getData(), "r"); 
    FileInputStream fis = videoAsset.createInputStream(); 
    File tmpFile = new File(Environment.getExternalStorageDirectory(),"VideoFile.3gp"); 
    FileOutputStream fos = new FileOutputStream(tmpFile); 

    byte[] buf = new byte[1024]; 
    int len; 
    while ((len = fis.read(buf)) > 0) { 
     fos.write(buf, 0, len); 
    }  
    fis.close(); 
    fos.close(); 
    } catch (IOException io_e) { 
    // TODO: handle error 
    } 

}

MediaStore.EXTRA_OUTPUT和开放的我们没有必要在这种情况下。

+0

intent.getData()中的“intent”给出了空指针异常......你有什么想法,它为什么会发生? – 2012-12-06 06:50:13

0

技巧是记录前将媒体插入数据库:

String fileName = "captureTemp.mp4"; 
ContentValues values = new ContentValues(); 
values.put(MediaStore.Video.Media.TITLE, fileName); 
cameraVideoURI = getContentResolver() 
    .insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); 

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraVideoURI); 
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); 
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, MAXIMUM_VIDEO_SIZE);    
startActivityForResult(intent, CAPTURE_VIDEO_INTENT); 

,然后onActivityResult()使用保存cameraVideoUri参考录制的视频:

String[] projection = 
    { MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE }; 
Cursor cursor = managedQuery(cameraVideoURI, projection, null, null, null); 
int column_index_data = 
    cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
int column_index_size = 
    cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE); 
cursor.moveToFirst(); 
String recordedVideoFilePath = cursor.getString(column_index_data); 
int recordedVideoFileSize = cursor.getInt(column_index_size); 
+1

这不适合我。它做了*某事*;而不是像通常那样忽略`EXTRA_OUTPUT`参数,尽管我指定了一个完整的路径名,例如/ sdcard/video文件夹,它在/ sdcard/video文件夹中创建了一个长度为零的文件,一些现有-DIR/newfile.3gp`。关于此API的完整和正确的文档将有所帮助。 – 2012-09-08 18:04:52