Я занимаюсь разработкой проекта форм Xamarin только с родным IOS. Использование веб-клиента для загрузки файла с указанного c URL-адреса и сохранения его в локальной папке устройства конечного пользователя.
public string DownloadFile(WebClient client,string downloadFileAddress, string fileName, string header, DownloadProgressChangedEventHandler downloadFileProgressHandler, AsyncCompletedEventHandler downloadCompletedEventHandler)
{
client.DownloadProgressChanged += downloadFileProgressHandler;
client.DownloadFileCompleted += downloadCompletedEventHandler;
string pathToNewFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Directory.CreateDirectory(pathToNewFolder);
string pathToNewFile = Path.Combine(pathToNewFolder, fileName);
client.DownloadFileAsync(uri, pathToNewFile);
return pathToNewFile;
}
private void downloadCompletedEventHandler(object sender, AsyncCompletedEventArgs e)
{
try
{
if (e.Cancelled)
{
if (client != null)
client.Dispose();
return;
}
}
finally
{
if (client != null)
client.Dispose();
}
}
private void downloadProgressEventHandler(object sender, DownloadProgressChangedEventArgs e)
{
double MainReleaseRecivedBytes = double.Parse(e.BytesReceived.ToString());
double percentage = (MainReleaseRecivedBytes) / e.TotalBytesToReceive * 100;
var DownloadProgressValue = int.Parse(Math.Truncate(percentage).ToString());
}
Я получаю локальный путь, например
/ Users / Syncfusion / Library / Developer / CoreSimulator / Devices / AF1C6C04-09CF-4503-B93 C -F96D603A5F1B / данные / Контейнеры / Data / Application / 8DACC52E-E183-412F-B4D3-E93B68C961C5 / Документы / природа. html
Необходимо открыть этот файл по умолчанию для просмотра устройства с помощью кода позади.
Я следовал этим ниже три типа методов
Метод 1 и 3 не является открытие любого средства просмотра.
Способ 2 открывается как изображение, Не открывая файл
https://i.stack.imgur.com/kV1cp.png
Можете ли вы предложить любое другое решение ?
Метод 1:
Browser.OpenAsync(DownaloadedFilePath, new BrowserLaunchOptions{
LaunchMode = BrowserLaunchMode.SystemPreferred,
TitleMode = BrowserTitleMode.Show,
PreferredToolbarColor = Color.AliceBlue,
PreferredControlColor = Color.Violet });
Метод 2:
Launcher.OpenAsync(new OpenFileRequest {
File = new ReadOnlyFile(DownaloadedFilePath)});
Метод 3:
DepencyService:
IDataViewer dataViewer = DependencyService.Get<IDataViewer>();
dataViewer.OpenFile(DownaloadedFilePath);
Интерфейс IDataViewer:
void OpenFile(string AttachmentName);
DataViewer:
[assembly: Dependency(typeof(DataViewer))]
namespace PlanViewer.iOS
{
public class DataViewer :UIViewController, IDataViewer
{
public void OpenFile(string filename)
{
FileInfo fileInfo = new FileInfo(filename);
QLPreviewController previewController = new QLPreviewController();
previewController.DataSource = new PDFPreviewControllerDataSource(fileInfo.FullName, fileInfo.Name);
UINavigationController controller = FindNavigationController();
if (controller != null)
{
controller.PresentViewController(previewController, true, null);
}
else
{
UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(
previewController, true, null);
}
}
private UINavigationController FindNavigationController()
{
foreach (var window in UIApplication.SharedApplication.Windows)
{
if (window.RootViewController.NavigationController != null)
return window.RootViewController.NavigationController;
else
{
UINavigationController val = CheckSubs(window.RootViewController.ChildViewControllers);
if (val != null)
return val;
}
}
return null;
}
private UINavigationController CheckSubs(UIViewController[] controllers)
{
foreach (var controller in controllers)
{
if (controller.NavigationController != null)
return controller.NavigationController;
else
{
UINavigationController val = CheckSubs(controller.ChildViewControllers);
if (val != null)
return val;
}
}
return null;
}
}
public class NavBarButton : UIBarButtonItem
{
private string v;
private Action<object, object> p;
public NavBarButton(string v, Action<object, object> p)
{
this.v = v;
this.p = p;
}
}
public class PDFPreviewControllerDataSource : QLPreviewControllerDataSource
{
string url = "";
string filename = "";
public PDFPreviewControllerDataSource(string url, string filename)
{
this.url = url;
this.filename = filename;
}
public override IQLPreviewItem GetPreviewItem(QLPreviewController controller, nint index)
{
return (IQLPreviewItem)new QLPreviewItemBundle(filename, url);
}
public override nint PreviewItemCount(QLPreviewController controller)
{
return 1;
}
}
public class QLPreviewItemBundle : QLPreviewItem
{
private string _fileName;
private string _filePath;
public QLPreviewItemBundle(string fullName, string name)
{
this._fileName = fullName;
this._filePath = name;
}
public override string ItemTitle
{
get
{
return _fileName;
}
}
public override NSUrl ItemUrl
{
get
{
var documents = NSBundle.MainBundle.BundlePath;
var lib = Path.Combine(documents, _filePath);
var url = NSUrl.FromFilename(lib);
return url;
}
}
}
}`
[1]: https://i.stack.imgur.com/kV1cp.png