android ACTION_VIDEO_CAPTURE 不保存视频

标签 android video android-intent record

我正在使用此代码录制视频并将其保存到 SD 卡中。

MainActivity.class

public void onClickCaptImage() {
//...
        folder = new File(Environment.getExternalStorageDirectory()
                + "/neoadn/neoadnVideo/");
        if (!folder.exists()) {
            if (!folder.mkdirs()) {
                Log.d("UserFolder", "failed to create directory");
            }
        }
        videoName = "test" + ".mp4";
        file = new File(folder.getAbsolutePath() + "/" + videoName );

        mVideoUri = Uri.fromFile(file);

        //....

        Intent intent = new Intent("android.media.action.VIDEO_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mVideoUri);
        startActivityForResult(intent, RESULT_VIDEO_REALIZADO);
    }

AndroidManifest.xml

<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

这段代码在大多数设备上都能正常工作。问题是我有一个 Xperia Mini Pro (4.0.4) 并且没有将视频保存在 sdcard 中并且没有给出错误。

我看到的唯一区别是,在 Xperia Mini Pro 上完成录制后会直接进入主屏幕,在我的 nexus 4 中会显示接受或取消录制视频的选项。

当 call-data.getData()- 进入 onActivityResult() 应用时返回以下内容:

05-11 20:16:04.310: I/data(4542): content://media/external/video/media/287

但是没有文件。

最佳答案

终于有了这段代码,我可以获得文件。选择视频的uri,将你想要的名字的视频复制到文件夹

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.i("CODES", "" + requestCode + ", " + resultCode + ", " + data);
        if (requestCode == RESULT_VIDEO_REALIZADO && resultCode == RESULT_OK) {



            String filePath = null;
            Uri _uri = data.getData();
            Log.d("", "URI = " + _uri);
            if (_uri != null && "content".equals(_uri.getScheme())) {
                Cursor cursor = this
                        .getContentResolver()
                        .query(_uri,
                                new String[] { android.provider.MediaStore.Video.VideoColumns.DATA },
                                null, null, null);
                cursor.moveToFirst();
                filePath = cursor.getString(0);
                cursor.close();
            } else {
                filePath = _uri.getPath();
            }
            Log.d("", "Chosen path = " + filePath);
            if (!file.exists()) {
                copyFile(filePath, file.toString());
                Log.i("COPY", "Copy: " + videoUri.toString() + " a "
                        + file.toString());
            }
            Log.i("uriVid", videoUri.getPath());

    }


private void copyFile(String inputFile, String outputFile) {

    InputStream in = null;
    OutputStream out = null;
    try {

        // create output directory if it doesn't exist
        File dir = new File(folder.toString());
        if (!dir.exists()) {
            dir.mkdirs();
        }

        in = new FileInputStream(inputFile);
        out = new FileOutputStream(outputFile);

        byte[] buffer = new byte[1024];
        int read;
        while ((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
        in.close();
        in = null;

        // write the output file (You have now copied the file)
        out.flush();
        out.close();
        out = null;

    } catch (FileNotFoundException fnfe1) {
        Log.e("tag", fnfe1.getMessage());
    } catch (Exception e) {
        Log.e("tag", e.getMessage());
    }

}

关于android ACTION_VIDEO_CAPTURE 不保存视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23596281/

相关文章:

android - 从我的 Android 应用程序将我的应用程序链接共享到其他应用程序不起作用

java - 在登录类的共享首选项中保存字符串以在 MainActivity 中使用 - 无法引用定义的非最终局部变量编辑器

javascript - React-native,在 android 上使用全屏图像

android - 如何以编程方式更改首选项的摘要文本颜色?

android - YouTube API 播放列表参数不适用于 YouTube 应用

memory - ColdFusion:CFEXECUTE/FFMPEG 内存问题?

android - AudioRecord 和 AudioTrack 回声

android - uml 中关于并行 Activity 的 Activity 图

HTML5 视频标签不显示亚马逊视频

java - 从一个 Activity 传递一个长类型变量并在另一个 Activity 中接收它并将其显示在 TextView 中