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

如何使用Xamarin Form在iOS iPhone的相册内创建文件夹

Xamarin.Forms iOS端相册自定义目录实现方案

Xamarin.Forms本身没有提供跨平台API直接操作系统相册,iOS端需要依赖原生Photos框架,通过依赖服务(DependencyService)封装实现即可,具体步骤如下:

1. 配置系统权限

iOS 11及以上版本需要在iOS项目的Info.plist文件中添加相册读写权限声明:

  • 添加NSPhotoLibraryAddUsageDescription权限,值填写展示给用户的权限说明,比如「需要访问相册存储拍摄的图片」
  • iOS 14及以上版本需要额外添加NSPhotoLibraryUsageDescription权限,满足创建/读取相册目录的权限要求

2. 定义跨平台接口

在Xamarin.Forms共享项目中新建服务接口:

public interface IPhotoAlbumService
{
    // 创建自定义相册目录,返回是否创建成功
    bool CreateCustomAlbum(string albumName);
    // 可自行扩展保存图片到指定目录的接口方法
}

3. iOS端实现接口

在iOS平台项目中新建接口实现类,同时注册依赖服务:

using Photos;
using Xamarin.Forms;
// 替换为你自己的项目命名空间
[assembly: Dependency(typeof(PhotoAlbumService_iOS))]
namespace YourAppName.iOS.Services
{
    public class PhotoAlbumService_iOS : IPhotoAlbumService
    {
        public bool CreateCustomAlbum(string albumName)
        {
            // 先校验相册读写权限
            var authStatus = PHPhotoLibrary.GetAuthorizationStatus(PHAuthorizationStatus.ReadWrite);
            if (authStatus != PHAuthorizationStatus.Authorized)
            {
                // 权限不足时同步请求权限
                var tcs = new System.Threading.Tasks.TaskCompletionSource<bool>();
                PHPhotoLibrary.RequestAuthorization(status =>
                {
                    tcs.SetResult(status == PHAuthorizationStatus.Authorized);
                });
                tcs.Task.Wait();
                if (!tcs.Task.Result) return false;
            }

            // 查找是否已存在同名相册
            PHAssetCollection existAlbum = null;
            var fetchOptions = new PHFetchOptions
            {
                Predicate = NSPredicate.FromFormat($"title == %@", albumName)
            };
            var fetchResult = PHAssetCollection.FetchAssetCollections(
                PHAssetCollectionType.Album, 
                PHAssetCollectionSubtype.Any, 
                fetchOptions);
            if (fetchResult.Count > 0)
            {
                return true; // 同名相册已存在直接返回成功
            }

            // 不存在则新建相册
            bool createResult = false;
            PHPhotoLibrary.SharedPhotoLibrary.PerformChanges(() =>
            {
                PHAssetCollectionChangeRequest.CreateAssetCollection(albumName);
            }, (success, error) =>
            {
                createResult = success;
                if (error != null)
                {
                    System.Diagnostics.Debug.WriteLine($"创建相册失败:{error.LocalizedDescription}");
                }
            });
            return createResult;
        }
    }
}

4. 共享项目调用

在需要创建相册目录的业务位置调用服务即可:

var albumService = DependencyService.Get<IPhotoAlbumService>();
bool createSuccess = albumService.CreateCustomAlbum("你要创建的相册名称");

补充:如果需要把拍摄的图片存入该自定义目录,可以在上述接口中扩展保存方法,创建PHAssetCreationRequest时指定目标相册即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:15:05