Desenvolvimento do Windows 10 - Contrato de Compartilhamento

Neste capítulo, aprenderemos como compartilhar dados entre aplicativos. Os usuários muitas vezes encontram informações que ficam ansiosos para compartilhar com alguém ou usá-las em outro aplicativo. Hoje em dia, os usuários querem usar a tecnologia para se conectar e compartilhar com outras pessoas.

Um usuário pode querer compartilhar -

  • Um link com sua rede social
  • Copie uma imagem em um relatório
  • Faça upload de um arquivo para armazenamento em nuvem

Os aplicativos de hoje precisam garantir que os dados que usam também estejam disponíveis para os usuários compartilharem e trocarem. Compartilhar é um recurso leve, fácil de adicionar ao seu aplicativo UWP. Existem várias maneiras de os aplicativos trocarem dados com outros aplicativos.

Em aplicativos UWP, o recurso de compartilhamento pode ser suportado das seguintes maneiras;

  • Primeiro, o aplicativo pode ser um aplicativo de origem que fornece conteúdo que o usuário deseja compartilhar.

  • Em segundo lugar, o aplicativo pode ser um aplicativo de destino que o usuário seleciona como destino para o conteúdo compartilhado.

  • Um aplicativo também pode ser um aplicativo de origem e um aplicativo de destino.

Compartilhando conteúdo

Compartilhar conteúdo de um aplicativo, que é um aplicativo de origem, é muito simples. Para realizar qualquer operação de compartilhamento, você precisará doDataPackageobjeto de classe. Este objeto contém os dados que o usuário deseja compartilhar.

Os seguintes tipos de conteúdo podem ser incluídos em DataPackage objeto -

  • Texto simples
  • Identificadores Uniformes de Recursos (URIs)
  • HTML
  • Texto formatado
  • Bitmaps
  • Files
  • Dados definidos pelo desenvolvedor

Ao compartilhar dados, você pode incluir um ou mais dos formatos mencionados acima. Para oferecer suporte ao compartilhamento em seu aplicativo, primeiro você precisa obter a instância doDataTransferManager classe.

Em seguida, ele registrará um manipulador de eventos que é chamado sempre que um DataRequested evento ocorre.

DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView(); 
dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, 
   DataRequestedEventArgs>(this.ShareTextHandler);

Quando seu aplicativo recebe um DataRequest objeto, então seu aplicativo está pronto para adicionar o conteúdo que o usuário deseja compartilhar.

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!"); 
}

Qualquer conteúdo que seu aplicativo compartilha deve conter duas propriedades -

  • Uma propriedade Title, que é obrigatória e deve ser definida.
  • O próprio conteúdo.

Recebendo conteúdo compartilhado

Se você deseja que seu aplicativo possa receber conteúdo compartilhado, a primeira coisa que você precisa fazer é declarar que ele suporta o Share Contract. Após a declaração, o sistema irá disponibilizar seu aplicativo para recebimento de conteúdo.

Para adicionar suporte do Contrato de Ações -

  • Clique duas vezes no package.appmanifest Arquivo.

  • Vou ao Declarationsaba. EscolherShare Target de Available Declarations lista e clique no Add botão.

  • Se desejar que seu aplicativo receba qualquer tipo de arquivo como conteúdo compartilhado, você pode especificar os tipos de arquivo e formatos de dados.

  • Para especificar os formatos de dados que você suporta, vá para o Data Formats seção, do Declarations página e clique Add New.

  • Digite o nome do formato de dados compatível. Por exemplo,"Text".

  • Para especificar o tipo de arquivo que você suporta, no Supported File Types seção do Declarations página, clique Add New.

  • Digite a extensão de nome de arquivo que deseja oferecer suporte, por exemplo, .pdf

  • Se você quer apoiar All file tipos, verifique o SupportsAnyFileType caixa.

  • Quando um usuário seleciona seu aplicativo como aplicativo de destino para compartilhar dados, OnShareTargetActivated evento é disparado.

  • Seu aplicativo precisa lidar com esse evento para processar os dados que o usuário deseja compartilhar.

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) { 
   // Code to handle activation goes here.  
}
  • Todos os dados que o usuário deseja compartilhar com qualquer aplicativo estão contidos em um ShareOperationobjeto. Você também pode verificar o formato dos dados que ele contém.

Abaixo está o trecho de código que trata shared content em formato de texto simples.

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; 
}

Vamos dar uma olhada em um exemplo simples criando um novo projeto UWP, que compartilhará um link da web.

A seguir, está o código XAML no qual um botão é criado com algumas propriedades.

<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 # no qual o evento de clique de botão é implementado e um código de compartilhamento de URI é fornecido abaixo.

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

Quando o código acima for compilado e executado, você verá a página a seguir no emulador.

Quando o botão é clicado, ele oferece opções para compartilhar em qual aplicativo.

Clique em mensagens e a seguinte janela será exibida, de onde você pode enviar o link para qualquer pessoa.