Compartir a través de


Recibir datos

En este artículo se explica cómo recibir contenido en la aplicación de Plataforma universal de Windows (UWP) compartida desde otra aplicación mediante el contrato de uso compartido. Este contrato para contenido compartido permite que la aplicación se presente como una opción cuando el usuario invoca Compartir.

Declaración de la aplicación como destino de recurso compartido

El sistema muestra una lista de posibles aplicaciones de destino cuando un usuario invoca a Share. Para que aparezca en la lista, la aplicación debe declarar que admite el contrato de uso compartido. Esto permite al sistema saber que la aplicación está disponible para recibir contenido.

  1. Abra el archivo de manifiesto. Se debe llamar algo parecido a package.appxmanifest.
  2. Abra la pestaña Declaraciones .
  3. Elija Share Target (Compartir destino ) en la lista Declaraciones disponibles y, a continuación, seleccione Agregar.

Elegir tipos y formatos de archivo

A continuación, decida qué tipos de archivo y formatos de datos admite. Las API de Share admiten varios formatos estándar, como Texto, HTML y Mapa de bits. También puede especificar tipos de archivo personalizados y formatos de datos. Si lo hace, recuerde que las aplicaciones de origen tienen que saber cuáles son esos tipos y formatos; De lo contrario, esas aplicaciones no pueden usar los formatos para compartir datos.

Registrar solo los formatos que la aplicación puede controlar. Solo aparecen aplicaciones de destino que admiten que se compartan los datos cuando el usuario invoca a Share.

Para establecer tipos de archivo:

  1. Abra el archivo de manifiesto. Se debe llamar algo parecido a package.appxmanifest.
  2. En la sección Tipos de archivo admitidos de la página Declaraciones, seleccione Agregar nuevo.
  3. Escriba la extensión de nombre de archivo que desea admitir, por ejemplo, ".docx". Debe incluir el período. Si desea admitir todos los tipos de archivo, active la casilla SupportsAnyFileType .

Para establecer formatos de datos:

  1. Abra el archivo de manifiesto.
  2. Abra la sección Formatos de datos de la página Declaraciones y seleccione Agregar nuevo.
  3. Escriba el nombre del formato de datos que admite, por ejemplo, "Texto".

Controlar la activación de recursos compartidos

Cuando un usuario selecciona la aplicación (normalmente seleccionándola en una lista de aplicaciones de destino disponibles en la interfaz de usuario de recurso compartido), se genera un evento OnShareTargetActivated. La aplicación debe controlar este evento para procesar los datos que el usuario quiere compartir.

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
    // Code to handle activation goes here. 
} 

Los datos que el usuario quiere compartir se encuentran en un objeto ShareOperation. Puede usar este objeto para comprobar el formato de los datos que contiene.

ShareOperation shareOperation = args.ShareOperation;
if (shareOperation.Data.Contains(StandardDataFormats.Text))
{
    string text = await shareOperation.Data.GetTextAsync();

    // To output the text from this example, you need a TextBlock control
    // with a name of "sharedContent".
    sharedContent.Text = "Text: " + text;
} 

Estado de uso compartido de informes

En algunos casos, la aplicación puede tardar tiempo en procesar los datos que quiere compartir. Entre los ejemplos se incluyen los usuarios que comparten colecciones de archivos o imágenes. Estos elementos son mayores que una cadena de texto simple, por lo que tardan más tiempo en procesarse.

shareOperation.ReportStarted(); 

Después de llamar a ReportStarted, no espere más interacción del usuario con la aplicación. Como resultado, no deberías llamarlo a menos que la aplicación esté en un momento en el que el usuario pueda descartarla.

Con un recurso compartido extendido, es posible que el usuario descarte la aplicación de origen antes de que la aplicación tenga todos los datos del objeto DataPackage. Como resultado, se recomienda informar al sistema cuando la aplicación haya adquirido los datos que necesita. De este modo, el sistema puede suspender o finalizar la aplicación de origen según sea necesario.

shareOperation.ReportSubmittedBackgroundTask(); 

Si algo va mal, llame a ReportError para enviar un mensaje de error al sistema. El usuario verá el mensaje cuando compruebe el estado del recurso compartido. En ese momento, la aplicación se cierra y finaliza el recurso compartido. El usuario tendrá que empezar de nuevo para compartir el contenido con la aplicación. En función de su escenario, puede decidir que un error determinado no es lo suficientemente grave como para finalizar la operación de recurso compartido. En ese caso, puede optar por no llamar a ReportError y continuar con el recurso compartido.

shareOperation.ReportError("Could not reach the server! Try again later."); 

Por último, cuando la aplicación haya procesado correctamente el contenido compartido, debe llamar a ReportCompleted para informar al sistema.

shareOperation.ReportCompleted();

Cuando usa estos métodos, normalmente los llama en el orden descrito y no los llama más de una vez. Sin embargo, hay ocasiones en las que una aplicación de destino puede llamar a ReportDataRetrieved antes de ReportStarted. Por ejemplo, la aplicación podría recuperar los datos como parte de una tarea en el controlador de activación, pero no llamar a ReportStarted hasta que el usuario seleccione un botón Compartir .

Cuando un usuario selecciona la aplicación para recibir contenido, se recomienda crear un QuickLink. Un QuickLink es como un acceso directo que facilita a los usuarios compartir información con la aplicación. Por ejemplo, podría crear un QuickLink que abra un nuevo mensaje de correo preconfigurado con la dirección de correo electrónico de un amigo.

Un QuickLink debe tener un título, un icono y un identificador. El título (como "Mamá de correo electrónico") y el icono aparecen cuando el usuario pulsa el acceso Compartir. El identificador es lo que usa la aplicación para acceder a cualquier información personalizada, como una dirección de correo electrónico o credenciales de inicio de sesión. Cuando la aplicación crea un QuickLink, la aplicación devuelve QuickLink al sistema llamando a ReportCompleted.

Un QuickLink no almacena realmente los datos. En su lugar, contiene un identificador que, cuando se selecciona, se envía a la aplicación. La aplicación es responsable de almacenar el identificador de QuickLink y los datos de usuario correspondientes. Cuando el usuario pulsa QuickLink, puede obtener su Identificador a través de la propiedad QuickLinkId.

async void ReportCompleted(ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
    QuickLink quickLinkInfo = new QuickLink
    {
        Id = quickLinkId,
        Title = quickLinkTitle,

        // For quicklinks, the supported FileTypes and DataFormats are set 
        // independently from the manifest
        SupportedFileTypes = { "*" },
        SupportedDataFormats = { StandardDataFormats.Text, StandardDataFormats.Uri, 
                StandardDataFormats.Bitmap, StandardDataFormats.StorageItems }
    };

    StorageFile iconFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.CreateFileAsync(
            "assets\\user.png", CreationCollisionOption.OpenIfExists);
    quickLinkInfo.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);
    shareOperation.ReportCompleted(quickLinkInfo);
}

Consulte también