Поделиться через


Как продолжить работу приложения для Windows Phone после вызова средства выбора файлов (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

При вызове средства выбора файлов из приложения Магазина Windows Phone приложение становится неактивным, пока средство выбора файлов не вернет выбор, сделанный пользователем. Однако на телефонах с небольшим объемом памяти работа приложения может быть завершена. Поэтому в приложении Магазина Windows Phone необходимо вызывать методы, отличающиеся от методов, вызываемых в приложении Магазина Windows, чтобы продолжить работу приложения после операции выбора файла. Эти методы показаны в следующей таблице.

Задача Метод, вызываемый из приложения Магазина Windows Метод, вызываемый из приложения Магазина Windows Phone
Выберите файл, который нужно открыть PickSingleFileAsync PickSingleFileAndContinue
Выберите расположение и имя файла, чтобы сохранить его PickSaveFileAsync PickSaveFileAndContinue
Выберите папку PickSingleFolderAsync PickFolderAndContinue

 

В примере этого раздела показано, как продолжить работу приложения, если вы используете FileOpenPicker. Используйте похожий код при вызове других методов выбора файлов и папок.

Совет  Пример этого решения см. в образце File picker.

 

Инструкции

Этап 1: Вызов класса FileOpenPicker и продолжение работы приложения

В следующем примере рассматривается ситуация, в которой пользователь выбирает новую фотографию для профиля с помощью FileOpenPicker.

  1. Вызовите метод PickSingleFileAndContinue, чтобы выбрать фото с помощью средства выбора файлов.

        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. Напишите метод продолжения, чтобы выполнить с выбранной пользователем фотографией нужное действие, когда приложение продолжит работу.

        // 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. Ожидайте событие activated.

        ...
        app.addEventListener("activated", activated, false);
        app.start();
    
  4. После активации приложения обработайте событие activated, запишите информацию об активации и передайте ее на страницу, с которой было вызвано средство выбора файлов.

        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. Проверьте значение свойства ActivationKind после перехода пользователя на эту страницу. Если значение равно pickFileContinuation, вызовите метод продолжения.

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

Связанные разделы

Образец File picker