2016-04-28 23 views
0

我试图推出在用户默认的PDF阅读器PDF:Launcher.LaunchUriAsync()失败时DisplayApplicationPicker =假

public async void NoPicker() 
{ 
    var options = new LauncherOptions() { ContentType = "application/pdf" }; 

    await Launcher.LaunchUriAsync(new Uri("http://bitcoin.org/bitcoin.pdf"), options); 
} 

此工作正常时,默认的阅读器福昕,但没有对IE和边缘。

但是,如果我叫LaunchUriAsync与DisplayApplicationPicker集,并在它被没有任何问题推出了应用程序管理器中选择IE或边缘:

public async void WithPicker() 
{ 
    var options = new LauncherOptions() { ContentType = "application/pdf", DisplayApplicationPicker = true}; 

    await Launcher.LaunchUriAsync(new Uri("http://bitcoin.org/bitcoin.pdf"), options); 
} 

为什么LaunchUriAsync变化取决于行为上,如果读者用一个选择器启动,并且有任何解决方法吗?

回答

1

经过几次测试和调查,我发现这个问题与ContentType property有关,似乎ContentType = "application/pdf"类型无法将您的URI指向网络上的资源。但是,Windows会尝试使用从内容类型计算出的文件类型来选择要启动的应用程序,因此它会打开Edge,但它不会指向您的URI。你也可以参考ContentType,没有这样的pdf内容类型。

我不知道为什么福昕可以在这种情况下工作,所以这个问题也可能与您使用的读卡器有关。

为了解决这个问题,你可以修改你这样的代码:

public async void NoPicker() 
{ 
    var options = new LauncherOptions(); 
    await Launcher.LaunchUriAsync(new Uri("http://bitcoin.org/bitcoin.pdf"), options); 
} 

当默认浏览器是边缘或Chrome,这将直接打开该PDF文件,但使用IE浏览器时,它会打开用户界面(UI)让用户选择下载此文件。

要确认我对ContentType的结论,可以将其更改为不同的类型进行测试,例如您可以测试options.ContentType = "application/x-compress";,它会使其行为如同设置为DisplayApplicationPicker = true

相关问题