파일 선택기를 호출한 후 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를 사용할 때 앱을 계속하는 방법을 보여줍니다. 다른 파일과 폴더 선택기 메서드를 호출할 때 비슷한 코드를 사용합니다.
팁 이 솔루션의 예제를 보려면 파일 선택기 샘플을 참조하세요.
지침
단계 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);