2016-02-16 1 views
0

Я пытаюсь использовать API FileOpenPicker, запустив его из закрепленной плитки в Windows Phone 8.1.FileOpenPicker бросает доступ к запрещенному исключению при запуске его из плитки, а не в приложении 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() вместо , но то же самое происходит.

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

ответ

0

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

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

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(); 
+0

Спасибо за ввод, SebD, но Studio говорит: «warning CS0618:« FileOpenPicker.PickSingleFileAsync() »устарел:« PickSingleFileAsync будет недоступен для Windows Phone 8.1, вместо этого используйте PickSingleFileAndContinue ». – robcsi

0

Ну это может быть, что rootFrame является недействительным или его содержание пустое .. Проверьте rootFrame является нулевой или содержанием является недействительным в OnLaunched методы. Это может быть проблемой.

+0

Rohit, никаких проблем с корневым фреймом нет, исключение вызывается в строке openPicker.PickSingleFileAndContinue() ;. Спасибо за ввод. – robcsi

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