0

私はビデオ録画を可能にするアプリを作成しようとしています。MediaStore.ACTION_IMAGE_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 には詳細が表示されません。

4

3 に答える 3

3

余分に追加しているため、エラーが発生したことに気付きました。私がする必要があったのは

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

次に、onActivityResult を要求コード == 1111 (入力した内容によって異なります) で追加し、カメラのデフォルト フォルダー「DCIM/Camera」から拡張子「.mp4」で構成される最後に変更されたファイルを取得します。

@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();
        }
    }
}

このようにして、ファイルの名前を取得し、それを使用して変更 (名前の変更など) を行うことができます。

これが他の人に役立つことを願っています。=)

于 2012-02-01T08:30:44.563 に答える
0

logcat を追加してください。ビデオ キャプチャには、MediaRecorder クラスを使用しています。これを使用することをお勧めします。興味があれば、適切なコードを提供できます。

于 2012-01-25T14:28:56.487 に答える
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" />

他に問題がある場合は、返信してください。

于 2012-01-28T08:48:04.713 に答える