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

.NET MAUI中Permissions.Photos始终返回Granted及弹窗异常求助

.NET MAUI相册权限不弹窗、拍照多弹窗问题排查与解决

一、相册权限首次返回Granted且无弹窗的原因及修复

  • 平台权限配置缺失
    Android端需在AndroidManifest.xml中添加对应权限声明:Android 13+用READ_MEDIA_IMAGES,Android 12及以下用READ_EXTERNAL_STORAGE;iOS端需在Info.plist中添加NSPhotoLibraryUsageDescription键,填写访问相册的用途说明。若缺失配置,系统可能静默授予权限或无法触发弹窗。

  • 权限类型选择错误
    Android 13+需使用Permissions.Photos.ReadOnly而非旧的Permissions.Photos,权限类型不匹配会导致状态判断异常。

  • 代码冗余优化
    原代码中TaskCompletionSource属于冗余逻辑,简化后可避免异步流程出错:

    public static async Task<PermissionStatus> GetMediaPermissionStatus()
    {
        var status = await Permissions.CheckStatusAsync<Permissions.Photos>();
        if (status != PermissionStatus.Granted)
        {
            status = await Permissions.RequestAsync<Permissions.Photos>();
        }
        return status;
    }
    

二、拍照时弹出两个权限弹窗的解决方法

拍照出现双弹窗,是因为MediaPicker.CapturePhotoAsync内部会同时请求相机权限和相册权限(默认需将照片保存至系统相册)。解决方式是提前主动申请相机权限:

public async void TakePhoto()
{
    // 提前请求相机权限
    var cameraStatus = await Permissions.CheckStatusAsync<Permissions.Camera>();
    if (cameraStatus != PermissionStatus.Granted)
    {
        cameraStatus = await Permissions.RequestAsync<Permissions.Camera>();
        if (cameraStatus != PermissionStatus.Granted)
        {
            // 权限被拒绝,可在此提示用户
            return;
        }
    }

    if (MediaPicker.Default.IsCaptureSupported)
    {
        FileResult photo = await MediaPicker.Default.CapturePhotoAsync();

        if (photo != null)
        {
            string localFilePath = Path.Combine(FileSystem.CacheDirectory, photo.FileName);

            using Stream sourceStream = await photo.OpenReadAsync();
            using FileStream localFileStream = File.OpenWrite(localFilePath);

            await sourceStream.CopyToAsync(localFileStream);
        }
    }
}

额外注意事项

  • Android 13+权限拆分后,需在Manifest中分别添加READ_MEDIA_IMAGES等细分权限,对应使用Permissions.Photos.ReadOnly请求。
  • iOS所有权限请求必须在Info.plist中添加用途描述,如相机需NSCameraUsageDescription,否则权限请求会被静默处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:05:29