Como fazer chamadas assíncronas no seu manipulador datarequested (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Aqui você verá como gerar os dados de forma assíncrona em resposta a um evento datarequested. Se o aplicativo executar qualquer operação assíncrona em resposta a um evento datarequested será necessário adquirir primeiro um objeto DataRequestDeferral. A aquisição de um objeto de adiamento permite que o sistema saiba que sua chamada para adicionar dados ao DataPackage pode ocorrer depois que o representante retornar.

Observação  Se você estiver apenas compartilhando texto ou um link, não precisará do código deste tópico. É mais rápido usar os métodos setText e setUri

 

O que você precisa saber

Tecnologias

Pré-requisitos

  • Você deve estar familiarizado com o Microsoft Visual Studio e com os modelos a ele associados.
  • Você deve estar familiarizado com JavaScript.
  • Você deve entender como obter arquivos e outros dados, como ao usar o FileOpenPicker.

Instruções

Etapa 1: Configurar seu aplicativo como origem de compartilhamento

O objeto DataTransferManager é o ponto de partida de qualquer operação de compartilhamento. Você adicionará um manipulador de eventos datarequested no objeto DataTransferManager no manipulador de eventos activated de seu aplicativo. O evento datarequested ocorre quando o usuário solicita o botão Compartilhar .

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

As demais etapas destinam-se à implementação da função shareAsyncHandler.

Etapa 2: Obter um objeto DataRequest

Quando ocorre um evento datarequested, o seu aplicativo recebe um objeto DataRequest. Este objeto contém um DataPackage que você pode usar para fornecer o conteúdo que o usuário quer compartilhar.

var request = e.request;

Etapa 3: Definir as propriedades de título e descrição

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

Etapa 4: Obter um objeto de adiamento

Para obter um objeto de adiamento, chame getDeferral.

var deferral = request.getDeferral();

Etapa 5: Faça chamada assíncrona para preparar os dados

Você pode usar qualquer método ao qual o DataPackage dê suporte para adicionar conteúdo. Aqui, usamos setStorageItems para compartilhar um arquivo.

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

Etapa 6: Chame o método completo

O método DataRequestDeferral.complete permite que o sistema saiba que os dados estão prontos para compartilhamento.

deferral.complete();

Você também deve chamar DataRequestDeferral.complete no manipulador de erros da chamada assíncrona.

Exemplo completo

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

Tópicos relacionados

Exemplo de aplicativo de compartilhamento de origem de conteúdo

Compartilhando e trocando dados

Como dar suporte para operações pull

Início rápido: compartilhando conteúdo

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share