如何在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
相关产品推荐
相关产品推荐

