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

.NET MAUI中MediaPicker.CaptureVideoAsync在Android上返回Null

解决.NET 7 MAUI Android上MediaPicker.CaptureVideoAsync返回null的问题

核心原因

拍摄视频需要同时获取相机权限和麦克风权限(视频包含音频轨道),你的代码仅请求了相机权限,权限不足导致MediaPicker无法正常返回拍摄结果。

解决方案步骤

1. 添加权限声明

在Android项目的Properties/AndroidManifest.xml中添加以下权限,或者在MainActivity.cs顶部通过特性声明(MAUI会自动同步到Manifest):

通过特性声明(推荐):

[assembly: UsesPermission(Android.Manifest.Permission.Camera)]
[assembly: UsesPermission(Android.Manifest.Permission.RecordAudio)]
[assembly: UsesFeature("android.hardware.camera", Required = false)]
[assembly: UsesFeature("android.hardware.camera.autofocus", Required = false)]

直接修改AndroidManifest.xml:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

2. 修改代码补充权限请求

更新你的代码,同时检查并请求相机和麦克风权限:

if (MediaPicker.Default.IsCaptureSupported)
{
    // 检查并请求相机权限
    var cameraStatus = await Permissions.CheckStatusAsync<Permissions.Camera>();
    if (cameraStatus != PermissionStatus.Granted)
    {
        cameraStatus = await Permissions.RequestAsync<Permissions.Camera>();
        if (cameraStatus != PermissionStatus.Granted)
        {
            return;
        }
    }

    // 检查并请求麦克风权限(拍摄视频必需)
    var micStatus = await Permissions.CheckStatusAsync<Permissions.Microphone>();
    if (micStatus != PermissionStatus.Granted)
    {
        micStatus = await Permissions.RequestAsync<Permissions.Microphone>();
        if (micStatus != PermissionStatus.Granted)
        {
            return;
        }
    }

    var video = await MediaPicker.CaptureVideoAsync();
    // 先判空避免空引用异常
    if (video != null)
    {
        string localFilePath = Path.Combine(FileSystem.CacheDirectory, video.FileName);
        // 将临时文件复制到应用缓存目录(可选,防止原临时文件被系统清理)
        using var sourceStream = await video.OpenReadAsync();
        using var targetStream = File.OpenWrite(localFilePath);
        await sourceStream.CopyToAsync(targetStream);
    }
}

3. 额外注意事项

  • 确保你的.NET 7 MAUI项目已更新到最新补丁版本,部分早期版本存在MediaPicker的兼容性问题。
  • 测试时注意:Android 13及以上系统,权限请求弹窗会分别询问相机和麦克风权限,需全部允许。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:42:39