2016-04-28 6 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); 
} 

Это прекрасно работает, когда читатель по умолчанию Foxit, но терпит неудачу в 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 с указанием ресурса в сети. Но окна будут пытаться использовать тип файла, вычисленный из типа содержимого, чтобы выбрать приложение для запуска, поэтому он открывает Edge, но не указывает на ваш URI. Вы также можете обратиться к ContentType, нет такого типа содержимого PDF.

Я не знаю, почему Foxit может работать в этой ситуации, поэтому эта проблема возможна и для читателя, которого вы использовали.

Чтобы решить эту проблему, вы можете просто изменить код так:

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.

Смежные вопросы