Comment permettre à votre application Windows Phone de continuer à s’exécuter après l’appel d’un sélecteur de fichiers (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Quand vous appelez un sélecteur de fichiers à partir d’une application du Windows Phone Store, celle-ci est désactivée tant que le sélecteur n’a pas retourné la sélection faite par l’utilisateur. Sur les téléphones dont la batterie est faible, en revanche, votre application risque de se fermer. Ainsi, vous devez appeler d’autres méthodes dans une application du Windows Phone Store que celles que vous appelez dans une application du Windows Store pour que votre application continue à s’exécuter après une opération avec le sélecteur de fichiers. Le tableau suivant indique ces méthodes.

Tâche Méthode à appeler depuis une application du Windows Store Méthode à appeler depuis une application du Windows Phone Store
Sélectionner un fichier à ouvrir PickSingleFileAsync PickSingleFileAndContinue
Sélectionner un emplacement et un nom de fichier pour enregistrer un fichier PickSaveFileAsync PickSaveFileAndContinue
Sélectionner un dossier PickSingleFolderAsync PickFolderAndContinue

 

L’exemple donné dans cette rubrique illustre comment continuer votre application quand vous utilisez une classe FileOpenPicker. Utilisez un code similaire quand vous appelez une autre méthode de sélecteur de fichiers et dossiers.

Astuce  Pour voir un exemple de cette solution, consultez l’exemple de sélecteur de fichiers.

 

Instructions

Étape 1: Pour appeler un FileOpenPicker et continuer votre application

L’exemple suivant suppose que l’utilisateur sélectionne une photo à l’aide d’une classe FileOpenPicker.

  1. Appelez la méthode PickSingleFileAndContinue pour sélectionner une photo à l’aide d’un sélecteur de fichiers.

        function pickSinglePhoto() {
            // Clean scenario output
            WinJS.log && WinJS.log("", "sample", "status");
    
            // Create the picker object and set options
            var openPicker = new Windows.Storage.Pickers.FileOpenPicker();
            openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
            openPicker.suggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.picturesLibrary;
            // Users expect to have a filtered view of their folders depending on the scenario.
            // For example, when choosing a documents folder, restrict the filetypes to documents for your application.
            openPicker.fileTypeFilter.replaceAll([".png", ".jpg", ".jpeg"]);
    
            // Open the picker for the user to pick a file
            openPicker.pickSingleFileAndContinue();
        }
    
  2. Écrivez une méthode de continuation qui définit l’action à effectuer avec la photo sélectionnée par l’utilisateur quand l’application poursuit son exécution.

        // Called when app is activated from file open picker
        // eventObject contains the returned files picked by user
        function continueFileOpenPicker(eventObject) {
            var files = eventObject[0].files;
            var filePicked = files.size > 0 ? files[0] : null;
            if (filePicked !== null) {
                // Application now has read/write access to the picked file
                WinJS.log && WinJS.log("Picked photo: " + filePicked.name, "sample", "status");
            } else {
                // The picker was dismissed with no selected file
                WinJS.log && WinJS.log("Operation cancelled.", "sample", "status");
            }
        }
    
  3. Écoutez l’événement activated.

        ...
        app.addEventListener("activated", activated, false);
        app.start();
    
  4. Quand l’application est activée, gérez l’événement activated pour capturer les informations sur l’activation et les transmettre à la page qui a appelé le sélecteur de fichiers.

        function activated(eventObject) {
            var activationKind = eventObject.detail.kind;
            var activatedEventArgs = eventObject.detail.detail;
    
            // Handle launch and continuation activation kinds
            switch (activationKind) {
                case activationKinds.launch:
                case activationKinds.pickFileContinuation:
                case activationKinds.pickSaveFileContinuation:
                case activationKinds.pickFolderContinuation:
                case activationKinds.webAuthenticationBrokerContinuation:
                    var p = WinJS.UI.processAll().
                        then(function () {
    
                            // Navigate to either the first scenario or to the last running scenario
                            // before suspension or termination.
                            var url = "/pages/home/home.html";
                            var initialState = {};
                            var navHistory = app.sessionState.navigationHistory;
                            if (navHistory) {
                                nav.history = navHistory;
                                url = navHistory.current.location;
                                initialState = navHistory.current.state || initialState;
                            }
                            initialState.activationKind = activationKind;
                            initialState.activatedEventArgs = activatedEventArgs;
                            nav.history.current.initialPlaceholder = true;
                            return nav.navigate(url, initialState);
                        });
    
                    ...
                    break;
    
                default:
                    break;
            }
    
  5. Quand l’utilisateur accède à la page, vérifiez la propriété ActivationKind. Si sa valeur est pickFileContinuation, appelez la méthode de continuation.

                if (options && options.activationKind === Windows.ApplicationModel.Activation.ActivationKind.pickFileContinuation) {
                    continueFileOpenPicker(options.activatedEventArgs);
    

Rubriques associées

Exemple de sélecteur de fichiers