2012-01-25 57 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