【发布时间】:2020-12-30 02:18:49
【问题描述】:
我正在使用以下代码在 xamarin 表单中使用 FilePicker 选择文件。最终目标是将 Android Uri 提供给 Xamarin.Android 项目中的服务,该服务将文件传输到某个地方。
我如何从 FilePicker 结果获取 xamarin 表单的 Android Uri(Android.Net.Uri )? Android 服务只接受 Android.Net.Uri 类型。
try
{
var result = await FilePicker.PickAsync(new PickOptions {
PickerTitle = "Select zip file"
});
if (result != null)
{
FileNameLabel.Text = $"File Name: {result.FileName}";
if (!result.FileName.EndsWith("zip", StringComparison.OrdinalIgnoreCase))
{
await DisplayAlert("Wrong File", "Selected file is not right", "Ok");
}
}
}
catch (Exception ex)
{
// The user canceled or something went wrong
}
我尝试了以下方法:
firmwareFullPath = result.FullPath;
Android.Net.Uri FirmwareUri = Android.Net.Uri.Parse(firmwareFullPath);
但是服务给出了找不到文件的错误。 该服务在 Xamarin.Android 项目中使用与本机文件选择器活动相同的文件运行良好,我从文件选择后返回的意图中获取 Uri。 下面是对 Uri 对象的比较,其中一个对象是使用 :
Android.Net.Uri.Parse(firmwareFullPath);
另一个来自
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if ((resultCode == Result.Ok) && (data != null))
{
Android.Net.Uri FirmwareUri = data.Data;
}
}
来自 Xamarin.Form FilePicker 的 Uri 对象
**主要区别是在 xamarin 表单文件选择器的情况下,Authority 和 EncodedAuthority 为 null **
【问题讨论】:
标签: android forms file xamarin picker