Как продолжить работу приложения для 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.
Вызовите метод 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(); }
Напишите метод продолжения, чтобы выполнить с выбранной пользователем фотографией нужное действие, когда приложение продолжит работу.
// 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"); } }
Ожидайте событие activated.
... app.addEventListener("activated", activated, false); app.start();
После активации приложения обработайте событие 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; }
Проверьте значение свойства ActivationKind после перехода пользователя на эту страницу. Если значение равно pickFileContinuation, вызовите метод продолжения.
if (options && options.activationKind === Windows.ApplicationModel.Activation.ActivationKind.pickFileContinuation) { continueFileOpenPicker(options.activatedEventArgs);