如何从Xamarin UWP项目在浏览器中打开.pdf文件?

时间:2019-04-04 20:29:59

标签: c# xamarin uwp

我有一个Xamarin项目,我从头开始生成一个.pdf文件并将其保存在本地存储中。这工作得很好,可以找到它并在我保存它的磁盘中打开它。但是,我需要以编程方式创建后立即打开.pdf文件。

我已经使用Process和ProcessStartInfo尝试了不同的变体,但是它们仅抛出诸如“ System.ComponentModel.Win32Exception:'系统找不到指定的文件'”和“'System.PlatformNotSupportedException'”之类的错误。

这基本上是我尝试使用Process打开的路径。


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


我还尝试了使用一些变体的ProcessStartInfo,但是我一遍又一遍地遇到相同的错误。

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

1 个答案:

答案 0 :(得分:0)

更好的方法是使用LaunchFileAsync方法通过浏览器打开文件。您可以创建FileLauncher DependencyService来从xamarin共享项目中调用uwp LaunchFileAsync方法。

界面

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

实施

[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;
        }
    }
}

用法

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

请注意,如果要访问uwp中的D或C磁盘,则需要添加broadFileSystemAccess功能。有关更多信息,请参阅this

更新

如果UWP文件是基于网络的,而不是基于本地区域的,则可以使用Xamarin.Essentials通过浏览器打开文件。并且您必须在清单中指定privateNetworkClientServer功能。有关更多信息,请参阅此link