Cómo realizar llamadas asincrónicas en el controlador DataRequested (HTML)
[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente
Aquí te mostraremos cómo generar datos asincrónicamente en respuesta a un evento datarequested. Si la aplicación realiza operaciones asincrónicas en respuesta a un evento datarequested, necesita adquirir primero un objeto DataRequestDeferral. Adquirir un objeto de aplazamiento permite al sistema saber que tu llamada para agregar datos al DataPackage podría producirse después de que se devuelva el delegado.
Nota Si solamente vas a compartir texto o un vínculo, no necesitas el código de este tema. Es más rápido usar los métodos setText y setUri.
Lo que debes saber
Tecnologías
Requisitos previos
- Debes estar familiarizado con Microsoft Visual Studio y sus plantillas asociadas.
- Debes estar familiarizado con JavaScript.
- Debes saber cómo obtener archivos y otros datos, por ejemplo, mediante el FileOpenPicker.
Instrucciones
Paso 1: Configurar tu aplicación como origen de uso compartido
El objeto DataTransferManager es el punto de partida principal para la operación de uso compartido de contenido. Agregarás un controlador de eventos datarequested al objeto DataTransferManager en el controlador de eventos activated de tu aplicación. El evento datarequested se produce cuando el usuario invoca el acceso a Compartir.
var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
dataTransferManager.addEventListener("datarequested", shareAsyncHandler);
Los pasos restantes implementan la función shareAsyncHandler
.
Paso 2: Obtener un objeto DataRequest
Cuando se produce un evento datarequested, tu aplicación recibe un objeto DataRequest. Este objeto contiene un DataPackage que puedes usar para proporcionar el contenido que el usuario quiere compartir.
var request = e.request;
Paso 3: Establecer las propiedades de título y descripción
request.data.properties.title = "Async Share Example";
request.data.properties.description =
"Demonstrates how to make asynchronous calls from a datarequested event handler.";
Paso 4: Obtener un objeto de aplazamiento
Para obtener un objeto de aplazamiento, llama a getDeferral.
var deferral = request.getDeferral();
Paso 5: Realizar una llamada asincrónica para preparar los datos
Puedes usar cualquiera de los siguientes métodos compatibles con el DataPackage para agregar contenido. Aquí, usamos setStorageItems para compartir un archivo.
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
request.data.setStorageItems([storageFile]);
});
Paso 6: Llamar al método completo
El método DataRequestDeferral.complete permite que el sistema sepa si los datos están listos para uso compartido.
deferral.complete();
También tienes que llamar a DataRequestDeferral.complete en el controlador de errores de la llamada asincrónica.
Ejemplo 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());
}
};
Temas relacionados
Muestra de una aplicación de origen de contenido compartido
Uso compartido e intercambio de datos
Cómo admitir operaciones de extracción
Inicio rápido: compartir contenido