2012-01-25 10 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); 

私は、実際のデバイスでアプリケーションを実行

が、それはビデオモードでカメラを呼び出しても、ビデオ録画を可能にありません。しかし、私は録音を終了するために録音ボタンを押すと、カメラが応答していないことを示す強制終了メッセージで私のアプリに戻ります。

最初に、私はビデオがキャプチャされていないと思ったが、私がファイルを検索したとき、それは実際に存在する。

私のonActivityResultメソッドは問題を引き起こすと思っていましたが、私は/ * ... * /とコメントした後も同じ問題があります。 LogCatには詳細は表示されません。

+0

コードとonActivityResultメソッドを追加しますか? –

+0

@Samirこんにちは、私はビデオを呼び出すの総コードを追加しました。 – Jovi

答えて

3

私は余分にそれを追加しているので、私はエラーを知っている。私はちょうど行うために必要なことから、「.MP4" を要求コード== 1111で、onActivityResultを追加します(入力したものに依存)と拡張子で構成され、最後の変更されたファイルを取得し、その後、

Intent takeVideoFromCameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
startActivityForResult(takeVideoFromCameraIntent, 1111); 

ですカメラの「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

ログキャストには何もありません。ありがとう、私は理解している簡単で簡単なコードを使用するために飛び回っています。私が知っているように、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 ...まあ...あなたが提供したコードは、私は変数を持っていないと言ってエラーで構成されています。 – Jovi

+0

public static final int MEDIA_TYPE_VIDEO = 2;あなたがそれをどこで取得するかわかりますか(例えばMEDIA_TYPE_VIDEO)。 –

+0

こんにちは、どこでメソッドgetOutputMediaFileUriを取得しましたか?私のコードに何が間違っているか教えてもらえませんか?ありがとう – Jovi