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. Это может быть проблемой.