How can I open a .pdf file in the browser from a Xamarin UWP project?

百般思念 提交于 2019-12-13 03:49:46

问题


I have a Xamarin Project where I generate a .pdf file from scratch and save it in my local storage. This works perfectly fine and can find it and open it in the disk where I saved it. However, I need to open the .pdf file immediately after creation programmatically.

I already tried different variations using Process and ProcessStartInfo but these just throw errors like "System.ComponentModel.Win32Exception: 'The system cannot find the file specified'" and "'System.PlatformNotSupportedException'".

This is basically the path I am trying to open using Process.


var p = Process.Start(@"cmd.exe", "/c start " + @"P:\\Receiving inspection\\Inspection Reports\\" + timestamp + ".pdf");


I also tried ProcessStartInfo using some variations but I'm getting the same errors all over and over.

var p = new Process();
p.StartInfo = new ProcessStartInfo(@"'P:\\Receiving inspection\\Inspection Reports\\'" + timestamp + ".pdf");
p.Start();


回答1:


The better way is that use LaunchFileAsync method to open file with browser. You could create FileLauncher DependencyService to invoke uwp LaunchFileAsync method from xamarin share project.

Interface

public interface IFileLauncher
{
    Task<bool> LaunchFileAsync(string uri);
}

Implementation

[assembly: Dependency(typeof(UWPFileLauncher))]

namespace App14.UWP
{
    public class UWPFileLauncher : IFileLauncher
    {
        public async Task<bool> LaunchFileAsync(string uri)
        {
            var file = await Windows.Storage.StorageFile.GetFileFromPathAsync(uri);
            bool success = false;
            if (file != null)
            {
                // Set the option to show the picker
                var options = new Windows.System.LauncherOptions();
                options.DisplayApplicationPicker = true;

                // Launch the retrieved file
                 success = await Windows.System.Launcher.LaunchFileAsync(file, options);
                if (success)
                {
                    // File launched
                }
                else
                {
                    // File launch failed
                }
            }
            else
            {
                // Could not  
            }
            return success;
        }
    }
}

Usage

private async void Button_Clicked(object sender, EventArgs e)
{        
  await DependencyService.Get<IFileLauncher>().LaunchFileAsync("D:\\Key.pdf");
}

Please note if you want to access D or C disk in uwp, you need add broadFileSystemAccess capability. for more please refer this .

Update

If the UWP files are network based, not local zone based, you could use Xamarin.Essentials to open file with browser. And you must specify the privateNetworkClientServer capability in the manifest. For more please refer this link.



来源:https://stackoverflow.com/questions/55524430/how-can-i-open-a-pdf-file-in-the-browser-from-a-xamarin-uwp-project

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!