2011-02-14 158 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