다음을 통해 공유


파일 선택기를 호출한 후 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를 사용하여 사진을 선택한다고 가정합니다.

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

관련 항목

파일 선택기 샘플