Desarrollo de Windows 10: contrato compartido
En este capítulo, aprenderemos cómo compartir datos entre aplicaciones. Los usuarios suelen encontrar información que les entusiasma compartir con alguien o utilizarla en otra aplicación. Hoy en día, los usuarios quieren utilizar la tecnología para conectarse y compartir con otras personas.
Un usuario puede querer compartir:
- Un enlace con su red social.
- Copiar una imagen en un informe
- Subir un archivo al almacenamiento en la nube
Las aplicaciones actuales necesitan asegurarse de que los datos que utilizan también estén disponibles para que los usuarios los compartan e intercambien. Compartir es una función liviana, que es fácil de agregar a su aplicación para UWP. Hay varias formas de que las aplicaciones intercambien datos con otras aplicaciones.
En las aplicaciones para UWP, la función de compartir se puede admitir de las siguientes formas;
En primer lugar, la aplicación puede ser una aplicación de origen que proporciona contenido que el usuario desea compartir.
En segundo lugar, la aplicación puede ser una aplicación de destino que el usuario selecciona como destino para el contenido compartido.
Una aplicación también puede ser tanto una aplicación de origen como una aplicación de destino.
Compartir contenido
Compartir contenido de una aplicación, que es una aplicación de origen, es muy sencillo. Para realizar cualquier operación de uso compartido, necesitará elDataPackageobjeto de clase. Este objeto contiene los datos que el usuario desea compartir.
Los siguientes tipos de contenido se pueden incluir en DataPackage objeto -
- Texto sin formato
- Identificadores uniformes de recursos (URI)
- HTML
- Texto formateado
- Bitmaps
- Files
- Datos definidos por el desarrollador
Al compartir datos, puede incluir uno o más de los formatos mencionados anteriormente. Para admitir el uso compartido en su aplicación, primero debe obtener la instancia delDataTransferManager clase.
A continuación, registrará un controlador de eventos que se llama siempre que un DataRequested evento ocurre.
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager,
DataRequestedEventArgs>(this.ShareTextHandler);
Cuando su aplicación recibe un DataRequest objeto, entonces su aplicación está lista para agregar el contenido que el usuario desea compartir.
private void ShareTextHandler(DataTransferManager sender, DataRequestedEventArgs e){
DataRequest request = e.Request;
// The Title is mandatory
request.Data.Properties.Title = "Share Text Example";
request.Data.Properties.Description = "A demonstration that shows how to share text.";
request.Data.SetText("Hello World!");
}
Cualquier contenido que comparta su aplicación debe tener dos propiedades:
- Una propiedad de título, que es obligatoria y debe establecerse.
- El contenido en sí.
Recibir contenido compartido
Si desea que su aplicación pueda recibir contenido compartido, lo primero que debe hacer es declarar que admite el Share Contract. Después de la declaración, el sistema permitirá que su aplicación esté disponible para recibir contenido.
Para agregar soporte del Contrato de Acciones -
Haga doble clic en el package.appmanifest archivo.
Ve a la Declarationslengüeta. EscogerShare Target desde el Available Declarations lista y haga clic en el Add botón.
Si desea que su aplicación reciba cualquier tipo de archivo como contenido compartido, puede especificar los tipos de archivo y los formatos de datos.
Para especificar los formatos de datos que admite, vaya a la Data Formats sección, de la Declarations página y haga clic en Add New.
Escriba el nombre del formato de datos que admite. Por ejemplo,"Text".
Para especificar el tipo de archivo que admite, en el Supported File Types sección de la Declarations página, haga clic en Add New.
Escriba la extensión del nombre de archivo que desea admitir, por ejemplo, .pdf
Si quieres apoyar All file tipos, compruebe el SupportsAnyFileType caja.
Cuando un usuario selecciona su aplicación como aplicación de destino para compartir datos, entonces OnShareTargetActivated se dispara el evento.
Su aplicación necesita manejar este evento para procesar los datos que el usuario desea compartir.
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) {
// Code to handle activation goes here.
}
Todos los datos que el usuario quiere compartir con cualquier aplicación están contenidos en un ShareOperationobjeto. También puede comprobar el formato de los datos que contiene.
A continuación se muestra el fragmento de código que maneja shared content en formato de texto sin formato.
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;
}
Veamos un ejemplo simple creando un nuevo proyecto de UWP, que compartirá un enlace web.
A continuación se muestra el código XAML en el que se crea un botón con algunas propiedades.
<Page
x:Class = "UWPSharingDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPSharingDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Orientation = "Vertical">
<TextBlock Text = "Share Web Link" Style = "{StaticResource
HeaderTextBlockStyle}" Margin = "30"></TextBlock>
<Button Content = "Invoke share contract" Margin = "10"
Name = "InvokeShareContractButton" Click = "InvokeShareContractButton_Click"
></Button>
</StackPanel>
</Grid>
</Page>
Código C # en el que se implementa el evento de clic de botón y a continuación se proporciona un código para compartir URI.
using System;
using Windows.ApplicationModel.DataTransfer;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
// The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPSharingDemo {
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page {
DataTransferManager dataTransferManager;
public MainPage() {
this.InitializeComponent();
dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += dataTransferManager_DataRequested;
}
void dataTransferManager_DataRequested(DataTransferManager sender,
DataRequestedEventArgs args) {
Uri sharedWebLink = new Uri("https://msdn.microsoft.com");
if (sharedWebLink != null) {
DataPackage dataPackage = args.Request.Data;
dataPackage.Properties.Title = "Sharing MSDN link";
dataPackage.Properties.Description = "The Microsoft Developer Network (MSDN)
is designed to help developers write applications using Microsoft
products and technologies.";
dataPackage.SetWebLink(sharedWebLink);
}
}
private void InvokeShareContractButton_Click(object sender, RoutedEventArgs e) {
DataTransferManager.ShowShareUI();
}
}
}
Cuando se compile y ejecute el código anterior, verá la siguiente página en el emulador.
Cuando se hace clic en el botón, le dará las opciones para compartir en qué aplicación.
Haga clic en mensajería y se mostrará la siguiente ventana desde donde puede enviar el enlace a cualquier persona.