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

Xamarin.Forms使用MediaPlugin时照片选择器权限不符合预期问题咨询

Xamarin.Forms MediaPlugin 照片权限问题解答

该现象是否为预期行为

这是iOS 14及以上版本的预期行为,对应苹果推出的有限照片访问权限机制:

  • 你调用的MediaPlugin相册选择器底层使用系统独立进程的PHPicker组件,该组件不受App自身相册权限限制,本身就会展示所有照片供用户选择
  • App实际仅能获取到用户最终选中的照片的访问权限,未被选中的照片你无法主动读取,不存在权限溢出问题
  • 苹果设计PHPicker的逻辑就是避免App请求全相册权限,仅返回用户选择的内容给App,所以哪怕你只授予了有限权限,选择器依然可以展示所有照片

移除「选择照片…」权限选项的方法

方案1:移除主动权限申请逻辑(更推荐)

如果你的业务仅需要用户主动选择照片,不需要后台扫描/读取全相册内容,完全可以删掉代码中主动申请Permissions.Photos的逻辑,直接调用PickPhotoAsync即可:

if (!CrossMedia.Current.IsPickPhotoSupported)
{
    await DisplayAlert("Photos Not Supported", "Sorry! Permission not granted to photos.", "OK");
    return;
}

MediaFile file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
{
    PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium,
});

if (file == null)
    return;

var imageSource = ImageSource.FromStream(() =>
{
    var stream = file.GetStream();
    return stream;
});

PickImage.Source = imageSource;

这种情况下不会触发系统的相册权限申请弹窗,自然不会出现「选择照片…」选项,同时也符合苹果的隐私设计规范。

方案2:修改Info.plist隐藏该选项

如果你确实需要申请全相册权限,可以在iOS项目的Info.plist文件中添加如下配置,即可隐藏权限弹窗中的「选择照片…」选项:

<key>PHPhotoLibraryPreventAutomaticLimitedAction</key>
<true/>

添加后权限弹窗仅会保留「允许访问所有照片」和「不允许」两个选项。注意添加该配置后,如果用户之前已经选择了有限权限,你需要自行处理适配逻辑,避免功能异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:45:07