2016-02-16 2 views
0

J'essaie d'utiliser l'API FileOpenPicker en la démarrant à partir d'une vignette épinglée dans Windows Phone 8.1.FileOpenPicker renvoie l'exception d'accès refusé lors du démarrage à partir d'une mosaïque plutôt que d'un bouton dans l'application Windows Phone 8.1

La vignette contient une commande pour laquelle l'application doit démarrer FileOpenPicker lorsqu'elle est lancée à partir de cette vignette. Dans ce cas, l'API FileOpenPicker lève une exception E_ACCESSDENIED. Lorsque vous appelez le même code à partir d'un bouton dans l'application, il ne plante pas. Donc, les capacités définies pour l'application sont correctes, il semble que l'environnement dans lequel FileOpenPicker est appelé n'est pas le même.

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

La dernière ligne est ce qui se bloque lors du démarrage de la tuile. Les deux scénarios l'appellent dans MainPage, après sa construction. La tuile appelle comme ça, de 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); 
    //} 
} 

J'ai essayé aussi la partie else (commentée) et appelant la méthode TakePicture() dans MainPage.NavigatedTo() au lieu , mais la même chose arrive.

Quel pourrait être le problème?

Répondre

0

Je ne connais pas les applications Windows Phone 8.1 mais votre FileOpenPicker doit fonctionner de manière asynchrone avec le thread d'interface utilisateur.

Avez-vous essayé d'utiliser la méthode asynchrone comme suit?

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

Merci pour l'entrée, SebD, mais Studio dit: "avertissement CS0618: 'FileOpenPicker.PickSingleFileAsync()' est obsolète: 'PickSingleFileAsync sera indisponible pour Windows Phone 8.1. Utilisez plutôt PickSingleFileAndContinue'". – robcsi

0

Eh bien, il pourrait être que rootFrame est nulle ou son contenu sont nuls .. Vérifiez si rootFrame est nulle ou le contenu est nul dans la méthode OnLaunched. Cela pourrait être un problème.

+0

Rohit, il n'y a pas de problème avec le rootFrame, l'exception est lancée sur la ligne openPicker.PickSingleFileAndContinue() ;. Merci pour la contribution. – robcsi