You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CameraX录制视频完成后获取对应的savedUri?

解决CameraX录制视频后获取输出Uri的问题

方法一:从VideoRecordEvent.Finalize实例直接获取

VideoRecordEvent.Finalize类本身提供了公开的getOutputUri()方法,无需访问内部私有字段,直接在事件回调里强转并调用即可:

@Override
public void accept(VideoRecordEvent videoRecordEvent) {
    if (videoRecordEvent instanceof VideoRecordEvent.Start) {
        setBackgroundBtn(R.drawable.recoding);
        Toast.makeText(CameraActivity.this, "recoding start...", Toast.LENGTH_SHORT).show();
    } else if (videoRecordEvent instanceof VideoRecordEvent.Finalize) {
        setBackgroundBtn(R.drawable.round_bg);
        Toast.makeText(CameraActivity.this, "Recoding stop ...", Toast.LENGTH_SHORT).show();
        // 获取视频输出Uri
        Uri outputUri = ((VideoRecordEvent.Finalize) videoRecordEvent).getOutputUri();
        // 此处可使用outputUri执行后续操作,如保存、播放等
    }
}

方法二:提前指定自定义输出Uri

如果需要更灵活控制输出路径,可在创建MediaStoreOutputOptions(即你的mso)时自行指定Uri,录制完成后直接复用该Uri:

// 提前创建输出Uri示例(基于MediaStore)
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "录制视频_" + System.currentTimeMillis() + ".mp4");
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4");
contentValues.put(MediaStore.Video.Media.RELATIVE_PATH, Environment.DIRECTORY_MOVIES + "/CameraX");

Uri outputUri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, contentValues);

// 创建MediaStoreOutputOptions
MediaStoreOutputOptions mso = new MediaStoreOutputOptions.Builder(getContentResolver(), MediaStore.Video.Media.EXTERNAL_CONTENT_URI)
        .setContentValues(contentValues)
        .build();

// 后续录制代码不变,录制完成后直接使用outputUri

以上两种方式均为CameraX官方支持的合法实现,可避免访问私有字段带来的版本兼容性风险。

内容的提问来源于stack exchange,提问作者K.Sopheak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:33:12