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

Android Nougat设备中MediaStore.ACTION_VIDEO_CAPTURE预览播放崩溃

解决系统相机录制视频后预览播放崩溃的问题

看起来你遇到的是调用系统相机录制视频后,在系统默认预览界面点击播放导致应用直接崩溃的问题,结合你的代码片段,我整理了几个可能的原因和对应的解决方案:

一、修复前置相机参数的兼容性问题

你代码里使用的"android.intent.extra.USE_FRONT_CAMERA"并不是Android官方标准的Intent Extra字段,不同厂商的系统相机对这个非标准参数的支持差异很大,甚至可能导致录制的视频文件出现异常,进而引发播放崩溃。

建议替换为官方推荐的相机朝向参数(适配大多数系统):

// 替换原有的前置相机参数
videoIntent.putExtra(MediaStore.EXTRA_CAMERA_FACING, Camera.CameraInfo.CAMERA_FACING_FRONT);
// 针对Android 21以下的低版本系统,可尝试直接传入数值1替代常量
// videoIntent.putExtra(MediaStore.EXTRA_CAMERA_FACING, 1);

二、确认权限配置完整

录制视频需要必要的权限支撑,缺少权限可能导致视频文件写入异常,最终触发播放崩溃:

  • Android 10及以下:需要在Manifest中声明CAMERA和WRITE_EXTERNAL_STORAGE权限,同时要在运行时动态申请这两个权限。
  • Android 11及以上:WRITE_EXTERNAL_STORAGE权限被弱化,但仍需CAMERA权限,录制的视频会默认存入公共媒体库,无需额外存储权限。

Manifest权限声明示例:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.front" />

三、正确处理相机返回的结果

确保你在处理相机返回结果时,对视频Uri做了严谨的判空和权限校验,避免空指针或无权限读取的情况:

如果使用旧版startActivityForResult,处理逻辑示例:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) {
        // 获取返回的视频Uri
        Uri videoUri = data.getData();
        if (videoUri != null) {
            // 此处可安全处理视频(如播放、存储),注意不要直接修改Uri指向的文件
        } else {
            Log.e("VideoCapture", "返回的视频Uri为空,可能录制过程异常");
        }
    }
}

如果是AndroidX推荐的ActivityResultContracts方式,实现示例:

ActivityResultLauncher<Intent> videoCaptureLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == RESULT_OK) {
            Intent data = result.getData();
            if (data != null) {
                Uri videoUri = data.getData();
                // 安全处理视频Uri
            }
        }
    }
);

// 调用相机时直接使用launcher启动
videoCaptureLauncher.launch(videoIntent);

四、排查崩溃的具体原因

虽然你说应用没有报错直接崩溃,但建议通过Android Studio的Logcat查看崩溃堆栈信息,重点关注这几类异常:

  • NullPointerException:大概率是返回的Uri为空或处理时未判空
  • SecurityException:权限不足导致无法读取视频文件
  • IOException:录制的视频文件损坏或无法正常读取

根据堆栈信息能更精准地定位问题根源。


内容的提问来源于stack exchange,提问作者Priyanka Valecha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:36