FileOpenPicker выбрасывает исключение для доступа при запуске из плитки, а не из кнопки в приложении Windows Phone 8.1

Я пытаюсь использовать FileOpenPicker API, запустив его с закрепленной плитки в Windows Phone 8.1.

В плитке хранится команда, для которой приложение запускает FileOpenPicker при запуске из этой плитки. В этом случае API FileOpenPicker выдает исключение E_ACCESSDENIED. При вызове одного и того же кода с кнопки в приложении он не падает. Итак, возможности, установленные для приложения, в порядке, просто кажется, что среда, в которой вызывается FileOpenPicker, не одинакова.

FileOpenPicker openPicker = new FileOpenPicker(); 
openPicker.ViewMode = PickerViewMode.Thumbnail; 
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
openPicker.FileTypeFilter.Add(".jpg"); 
openPicker.FileTypeFilter.Add(".jpeg"); 
openPicker.FileTypeFilter.Add(".png"); 

openPicker.PickSingleFileAndContinue(); 

Последняя строка - это то, что вылетает при запуске с тайла. В обоих сценариях это вызывается внутри MainPage после его создания. Плитка называет это так из App.xaml.cs/OnLaunched():

if (!e.TileId.Equals("App"))
{
    var mainPage = rootFrame.Content as Views.MainPage;
    if (mainPage != null)
    {
        string command = e.Arguments;
        if (!string.IsNullOrWhiteSpace(command) && command.Equals(Utils.TileCommand))
        {
              mainPage.TakePicture ();
        }
    }
    //else
    //{
    //    rootFrame.Navigate(typeof(Views.MainPage), e.Arguments);
    //}
}

Я также попробовал другую часть (закомментированную) и вызвал метод TakePicture() в MainPage.NavigatedTo (), но то же самое происходит.

В чем может быть проблема?

2 ответа

Я не разбираюсь в приложениях Windows Phone 8.1, но ваш FileOpenPicker должен работать асинхронно из потока пользовательского интерфейса.

Вы пытались использовать асинхронный метод следующим образом?

FileOpenPicker openPicker = new FileOpenPicker(); 
openPicker.ViewMode = PickerViewMode.Thumbnail; 
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; 
openPicker.FileTypeFilter.Add(".jpg"); 
openPicker.FileTypeFilter.Add(".jpeg"); 
openPicker.FileTypeFilter.Add(".png"); 

StorageFile file = await openPicker.PickSingleFileAsync();

Возможно, rootFrame имеет значение null или его содержимое равно нулю. Проверьте, имеет ли значение rootFrame значение null или значение null в методе OnLaunched. Это может быть проблемой.

Другие вопросы по тегам