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);
我还需要设置什么吗?
- Apple M1(macOS 蒙特雷)
- Visual Studio 对于 Mac 8.10.17
- Xamarin.Essentials 1.7.0
- Xamarin.Forms 5.0.0.2291
由于您的文件类型 属性 设置为 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 时使用它。
当我尝试在 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);
我还需要设置什么吗?
- Apple M1(macOS 蒙特雷)
- Visual Studio 对于 Mac 8.10.17
- Xamarin.Essentials 1.7.0
- Xamarin.Forms 5.0.0.2291
由于您的文件类型 属性 设置为 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 时使用它。