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

Android 13环境下Xamarin.Forms应用无法访问图库图片的权限问题求助

Android 13环境下Xamarin.Forms应用无法访问图库图片的权限问题求助

你好,我仔细梳理了你的问题和代码细节,Android 13的媒体权限变更确实给不少Xamarin开发者挖了坑,结合你的情况,我整理了几个关键的解决方向,帮你一步步排查:

  • 先解决Xamarin.Essentials版本问题
    你当前用的Xamarin.Essentials 1.8.0是比较旧的版本,发布时间早于Android 13的权限规范更新,它根本不识别READ_MEDIA_IMAGES这类细化媒体权限,自然没法处理对应的权限请求逻辑。这是核心问题之一,建议直接把Essentials升级到最新稳定版(目前至少要到1.9.0及以上,推荐升级到2.x系列),新版本已经完整适配了Android 13的权限体系。

  • 必须添加动态权限请求逻辑
    即便你在AndroidManifest里声明了权限,Android 13对READ_MEDIA_IMAGES这类权限依然要求运行时动态请求,只靠清单声明或者手动去系统设置里开启权限是行不通的(手动开启后组件也识别不到)。升级Essentials后,在调用文件选择代码前,先主动请求权限:

    // 先请求图库权限
    var permissionStatus = await Permissions.RequestAsync<Permissions.MediaImages>();
    if (permissionStatus != PermissionStatus.Granted)
    {
        // 这里可以提示用户需要授权才能访问图库,或者直接返回
        await Application.Current.MainPage.DisplayAlert("提示", "需要授予图库权限才能选择图片", "确定");
        return;
    }
    
    // 权限通过后再执行文件选择
    try
    {
        FileData fileData = await CrossFilePicker.Current.PickFile();
        if (fileData == null)
            return; // 用户取消选择
    
        // 后续图片处理逻辑...
    }
    catch (Exception ex)
    {
        // 异常处理
    }
    
  • 检查CrossFilePicker的适配情况
    除了Essentials,你用的CrossFilePicker组件如果是旧版本,可能还在请求已被Android 13废弃的READ_EXTERNAL_STORAGE权限,这会导致权限请求失效。建议把CrossFilePicker也升级到最新版本,确保它已经适配了Android 13的新权限机制。

  • AndroidManifest的细节优化
    你已经添加了正确的细化媒体权限,但要注意:

    • 如果之前清单里声明过READ_EXTERNAL_STORAGE,现在要删掉它,避免和新权限产生冲突;
    • 确保targetSdkVersion确实设置为33,并且代码里的[assembly: UsesPermission]声明和Manifest里的内容一致,不要出现重复或矛盾。
  • 测试时的小技巧
    测试前一定要完全卸载旧版本的应用再重新安装,因为Android会缓存应用的权限状态,旧版本的权限残留可能干扰新版本的测试结果。

备注:内容来源于stack exchange,提问作者Marcel Delhaye

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 08:42:57