Condividi tramite


Come effettuare chiamate asincrone nel gestore dell'evento datarequested (HTML)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

In questa sezione verrà illustrato come fornire dati in modo asincrono in risposta a un evento datarequested. Se la tua app esegue operazioni asincrone in risposta a un evento datarequested, prima deve acquisire un oggetto DataRequestDeferral. L'acquisizione di un oggetto di differimento informa il sistema che la chiamata per aggiungere dati a DataPackage potrebbe avvenire dopo la restituzione del delegato.

Nota  Se stai condividendo solo testo o un link, non hai bisogno del codice disponibile in questo argomento. È più veloce usare i metodi setText e setUri.

 

Cosa sapere

Tecnologie

Prerequisiti

  • Occorre avere già familiarità con Microsoft Visual Studio e i modelli associati.
  • Occorre avere già familiarità con JavaScript.
  • Devi capire come ottenere i file e altri dati, usando FileOpenPicker ad esempio.

Istruzioni

Passaggio 1: Impostare l'app come origine di condivisione

L'oggetto DataTransferManager è il punto di partenza principale per qualsiasi operazione di condivisione. Dovrai aggiungere un gestore eventi datarequested sull'oggetto DataTransferManager nel gestore eventi activated della tua app. L'evento datarequested si verifica quando l'utente richiama l'accesso alla condivisione.

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

I passaggi rimanenti implementano la funzione shareAsyncHandler.

Passaggio 2: Recuperare un oggetto DataRequest

Quando si verifica un evento datarequested, l'app riceve un oggetto DataRequest. Questo oggetto contiene un DataPackage che puoi usare per fornire il contenuto che l'utente vuole condividere.

var request = e.request;

Passaggio 3: Impostare le proprietà di titolo e descrizione

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

Passaggio 4: Recuperare un oggetto di differimento

Per recuperare un oggetto di differimento, chiama getDeferral.

var deferral = request.getDeferral();

Passaggio 5: Effettuare chiamate asincrone per preparare i dati

Puoi usare qualsiasi metodo supportato da DataPackage per aggiungere contenuto. In questo caso usiamo setStorageItems per condividere un file.

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

Passaggio 6: Chiamare il metodo Complete

Il metodo DataRequestDeferral.complete consente al sistema di sapere che i dati sono pronti per la condivisione.

deferral.complete();

Devi inoltre chiamare DataRequestDeferral.complete nel gestore di errori della chiamata asincrona.

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

Argomenti correlati

Esempio di condivisione di contenuto da un'altra app

Condivisione e scambio di dati

Come supportare operazioni pull

Guida introduttiva: Condivisione di contenuto

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share