Xamarin如何实现调用系统默认图库打开指定相册文件夹
Xamarin 调用系统图库/指定存储文件夹实现方案
Android 平台实现
Android 可直接通过系统 Intent 实现需求,无需额外开发自定义浏览页面:
- 权限配置:Android 13+ 需在
AndroidManifest.xml中配置READ_MEDIA_IMAGES、READ_MEDIA_VIDEO权限,Android 12 及更低版本配置READ_EXTERNAL_STORAGE权限,跳转前需确保已完成动态权限申请。 - 打开指定相册代码示例:
// 跳转至名称为MyCustomAlbum的相册页面,仅展示图片 var intent = new Intent(Intent.ActionView); var mediaUri = Android.Provider.MediaStore.Images.Media.ExternalContentUri; intent.SetDataAndType(mediaUri, "vnd.android.cursor.dir/image"); intent.PutExtra(Intent.ExtraAlbum, "MyCustomAlbum"); StartActivity(intent); // 如需同时展示相册内的图片和视频,将MIME类型改为"vnd.android.cursor.dir/*"即可
- 打开指定存储文件夹代码示例:
// 替换为你保存视频的文件夹路径 var targetFolderPath = Android.OS.Environment.GetExternalStoragePublicDirectory( Android.OS.Environment.DirectoryDcim + "/MyVideoFolder").AbsolutePath; var folderUri = Android.Net.Uri.Parse(targetFolderPath); var intent = new Intent(Intent.ActionView); intent.SetDataAndType(folderUri, "resource/folder"); intent.AddFlags(ActivityFlags.GrantReadUriPermission); if (intent.ResolveActivity(PackageManager) != null) { StartActivity(intent); } else { // 兜底方案:唤起系统选择器用文件管理器打开 intent.SetDataAndType(folderUri, "*/*"); StartActivity(Intent.CreateChooser(intent, "选择打开方式")); }
iOS 平台实现
受iOS沙箱机制限制,官方未公开跳转指定相册的公开API,可通过私有协议实现主流版本适配:
- 直接跳转系统相册主页面代码:
UIApplication.SharedApplication.OpenUrl(new NSUrl("photos-redirect://"));
- 跳转自定义指定相册代码(适配iOS14+):
// 替换为你的自定义相册名称 var albumName = "MyCustomAlbum"; var fetchOptions = new PHFetchOptions { Predicate = NSPredicate.FromFormat("localizedTitle == %@", new NSString(albumName)) }; var fetchResult = PHAssetCollection.FetchAssetCollections( PHAssetCollectionType.Album, PHAssetCollectionSubtype.Any, fetchOptions); if (fetchResult.FirstObject is PHAssetCollection targetAlbum) { var albumUrl = new NSUrl($"photos://album?id={targetAlbum.LocalIdentifier}"); UIApplication.SharedApplication.OpenUrl(albumUrl); }
注意:iOS的相册跳转私有协议未做官方兼容,少数系统版本可能出现跳转失败的情况,遇到适配问题可提示用户手动打开系统相册对应目录查看。
通用注意事项
- 跳转前需确保存储/相册访问权限已被用户授予,否则会出现打开后无内容的问题
- 相册名称、文件夹路径需和你保存媒体文件时的配置完全一致,否则无法正确筛选内容
内容的提问来源于stack exchange,提问作者blacky99
相关产品推荐
相关产品推荐

