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
相关产品推荐
相关产品推荐

