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