Xamarin.Essentials 无法 iOS "File Picker" 中的图像 select

Xamarin.Essentials Unable to select images in "File Picker" on iOS

当我尝试在 Xamarin.Essentials 中使用“文件选取器”select 图像时,我无法 select 仅在 iOS 模拟器中。

Xamarin.Essentials:文件选取器
https://docs.microsoft.com/en-us/xamarin/essentials/file-picker?context=xamarin%2Fandroid&tabs=ios

var options = new PickOptions
{
  PickerTitle = "Please select files",
  FileTypes = FilePickerFileType.Images,
};

IEnumerable<FileResult> results = await FilePicker.PickMultipleAsync(options);

FilePickerFileType.Jpeg 设置对我不起作用。此外,我无法 select 具有 FilePickerFileType.Pdf 设置的 PDF 文件。

但是,当我启动 Android 模拟器时,我能够成功 select 图像;只有 iOS 模拟器无法 select 它。

由于PickerTitle也没有反映出来,看来options本身没有启用。

此外,即使我按照下面的答案修改了 customFileType 区域,它仍然不允许我 select 文件。

var customFileType =
  new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
  {
      {DevicePlatform.iOS, new[] { "com.adobe.pdf" , "public.jpeg" } },
  });

var options = new PickOptions
  {
      PickerTitle = "Please select files",
      //FileTypes = FilePickerFileType.Images,
      FileTypes = customFileType,
  };

IEnumerable<FileResult> results = await FilePicker.PickMultipleAsync(options);

我还需要设置什么吗?

由于您的文件类型 属性 设置为 FilePickerFileType.Images,pdf 文件不允许 select。所以在设置FileTypes的时候需要加上。

这里是后台代码:

private void Button_Clicked(object sender, EventArgs e)
{
    Task<FileResult> results =  PickAndShow();
}
async Task<FileResult> PickAndShow()
{
    var customFileType =
        new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
        {
            {DevicePlatform.iOS, new[] { "com.adobe.pdf" , "public.image" } },
        });
    try
    {
        var result = await FilePicker.PickAsync(new PickOptions
        {
            PickerTitle = "Please select files",
            FileTypes = customFileType,  
        }) ;
        if (result != null)
        {
            Text = $"File Name: {result.FileName}";
            if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
                result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
            {
                var stream = await result.OpenReadAsync();
                Image = ImageSource.FromStream(() => stream);
            }
        }
        return result;
    }
    catch (Exception ex)
    {
        // The user canceled or something went wrong
    }
    return null;
}

主要区别在于我创建了一个 customFileType 并在设置 FileTypes 时使用它。