다음을 통해 공유


Datarequested 처리기에서 비동기적으로 호출하는 방법(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

여기에서는 datarequested 이벤트에 대한 응답으로 데이터를 비동기적으로 생성하는 방법을 보여 줍니다. 앱이 datarequested 이벤트에 응답하여 비동기 작업을 수행하는 경우 먼저 DataRequestDeferral 개체를 가져와야 합니다. 지연 개체 가져오기에서는 대리자가 반환된 후 DataPackage에 데이터를 추가하는 호출이 수행될 수 있음을 시스템에 알릴 수 있습니다.

참고  텍스트 또는 링크를 공유하는 경우에는 이 항목에 나오는 코드가 필요하지 않습니다. 대신 setTextsetUri 메서드를 사용하는 것이 더 빠릅니다.

 

알아야 할 사항

기술

사전 요구 사항

  • Microsoft Visual Studio 및 관련 템플릿을 잘 알고 있어야 합니다.
  • JavaScript에 대해 잘 알고 있어야 합니다.
  • 파일 및 기타 데이터를 가져오는 방법(예: FileOpenPicker 사용)을 알고 있어야 합니다.

지침

단계 1: 앱을 공유 소스로 설정

DataTransferManager 개체는 모든 공유 작업의 주요 시작점입니다. 앱의 activated 이벤트 처리기에서 DataTransferManager 개체에 datarequested 이벤트 처리기를 추가합니다. datarequested 이벤트는 사용자가 공유 참 메뉴를 호출할 때 발생합니다.

var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
    dataTransferManager.addEventListener("datarequested", shareAsyncHandler);

나머지 단계에서는 shareAsyncHandler 함수를 구현합니다.

단계 2: DataRequest 개체 가져오기

datarequested 이벤트가 발생하면 앱이 DataRequest 개체를 받습니다. 이 개체에는 사용자가 공유하려는 콘텐츠를 제공하는 데 사용할 수 있는 DataPackage가 포함되어 있습니다.

var request = e.request;

단계 3: 제목 및 설명 속성 설정

request.data.properties.title = "Async Share Example";
request.data.properties.description =
    "Demonstrates how to make asynchronous calls from a datarequested event handler.";

단계 4: 지연 개체 가져오기

지연 개체를 가져오려면 getDeferral을 호출합니다.

var deferral = request.getDeferral();

단계 5: 비동기 호출을 수행하여 데이터 준비

DataPackage에서 지원하는 메서드를 사용하여 콘텐츠를 추가할 수 있습니다. 여기서는 setStorageItems을 사용하여 파일을 공유합니다.

Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
    request.data.setStorageItems([storageFile]);
});

단계 6: complete 메서드 호출

DataRequestDeferral.complete 메서드는 공유할 데이터를 준비 중임을 시스템에 알려 줍니다.

deferral.complete();

또한 비동기 호출의 오류 처리기에서 DataRequestDeferral.complete를 호출해야 합니다.

전체 예제

function shareAsyncHandler(e) {
    var request = e.request;
    request.data.properties.title = "Async Share Example";
    request.data.properties.description = 
        "Demonstrates how to make asynchronous calls from a datarequested event handler.";
    var deferral = request.getDeferral();
    Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
        request.data.setStorageItems([storageFile]);
        deferral.complete();
    }, function (err) {
        deferral.complete();
    });
}

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
            // This app was recently launched; register it as share source.
            var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
            dataTransferManager.addEventListener("datarequested", shareAsyncHandler);
        } else {
            // TODO: This app was reactivated from suspension.
            // Restore the app state here.
        }
        args.setPromise(WinJS.UI.processAll());
    }
};

관련 항목

콘텐츠 공유 원본 앱 샘플

데이터 공유 및 교환

끌어오기 작업을 지원하는 방법

빠른 시작: 콘텐츠 공유

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share