Android13下Xamarin Essentials MediaPicker存储读取权限被拒解决方案求助
解决Android 13(API33)下Xamarin.Essentials MediaPicker存储权限异常问题
1. 替换旧存储权限为API33专属媒体权限
Android 13(API33)拆分了原有的存储权限体系,针对照片选择场景,你需要修改AndroidManifest.xml:
- 移除
READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE(仅选择照片时无需WRITE权限) - 添加API33专属照片权限:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
若需处理视频/音频,可额外添加READ_MEDIA_VIDEO或READ_MEDIA_AUDIO。
2. 升级Xamarin.Essentials版本
你当前使用的1.7.5版本对Android 13适配不完善,建议升级到2.0.0及以上版本。新版本已适配API33的权限逻辑,能自动处理MediaPicker所需的权限请求,避免手动处理的遗漏。
3. 手动权限请求适配(无法升级版本时)
如果暂时无法升级库,需针对API版本做权限判断:
- 在调用MediaPicker前,根据系统版本请求对应权限:
var status = PermissionStatus.Denied; if (DeviceInfo.Version.Major >= 13) { status = await Permissions.RequestAsync<Permissions.Media>(); } else { status = await Permissions.RequestAsync<Permissions.StorageRead>(); } if (status == PermissionStatus.Granted) { var result = await MediaPicker.PickPhotoAsync(); // 后续照片处理逻辑 }
4. 额外注意事项
- Android 13中
WRITE_EXTERNAL_STORAGE已废弃,媒体文件写入无需申请该权限,直接通过MediaStore API操作即可。 - 检查模拟器系统设置,确认APP已被授予对应的媒体权限(路径:设置-应用-你的APP-权限)。
内容的提问来源于stack exchange,提问作者Beatriz Pinheiro
相关产品推荐
相关产品推荐

