我有一个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();
答案 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。