ошибка при вызове MediaStore.ACTION_VIDEO_CAPTURE

Я пытаюсь создать приложение, которое позволяет записывать видео. я знаю, что с помощью 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 нет никаких подробностей.


person starvi    schedule 25.01.2012    source источник
comment
добавить свой код и метод onActivityResult?   -  person Samir Mangroliya    schedule 25.01.2012
comment
@Samir, привет, я добавил общий код вызова видео.   -  person starvi    schedule 28.01.2012


Ответы (3)


я понимаю, что получил ошибку, потому что я добавляю к ней лишнее. что мне просто нужно было сделать, это

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

затем добавьте onActivityResult с кодом запроса == 1111 (зависит от того, что вы ввели) и извлеките последний измененный файл с расширением «.mp4» из папки камеры по умолчанию «DCIM/Camera».

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

таким образом, я могу получить имя файла, а также внести в него изменения (например, переименовать).

надеюсь, что это поможет другим людям. знак равно

person starvi    schedule 01.02.2012

пожалуйста, добавьте свой logcat. Для захвата видео я использую класс MediaRecorder, я предлагаю вам использовать его. Если вы заинтересованы, я могу дать вам правильный код.

person Milos Cuculovic    schedule 25.01.2012
comment
в логарифме ничего нет. спасибо, но я надеюсь использовать легкий и простой код, который я понимаю, поскольку, насколько я знаю, MediaRecorder кажется сложным. - person starvi; 28.01.2012
comment
Нет, использовать MediaRecorder очень просто, я выложу пример, если вы попробуете. - person Milos Cuculovic; 29.01.2012

Я думаю, ваша проблема решена с помощью этого кода.


//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" />

Если у вас есть другая проблема, пожалуйста, ответьте мне.

person Manoj Kumar    schedule 28.01.2012
comment
эм... ну... код, который вы предоставили, состоит из ошибки, говорящей, что у меня нет переменной. могу ли я узнать, где вы его берете (например, MEDIA_TYPE_VIDEO) - person starvi; 28.01.2012
comment
публичный статический окончательный int MEDIA_TYPE_VIDEO = 2; - person Manoj Kumar; 28.01.2012
comment
привет, где вы взяли метод getOutputMediaFileUri? не могли бы вы сказать мне, что пошло не так с моими кодами? Благодарность - person starvi; 28.01.2012