Compartilhar via


Compartilhar dados

Este artigo explica como dar suporte ao contrato de compartilhamento em uma área de trabalho ou em um aplicativo da Plataforma Universal do Windows (UWP). O contrato de compartilhamento é uma maneira fácil de compartilhar rapidamente dados, como texto, links, fotos e vídeos, entre aplicativos. Por exemplo, um usuário pode querer compartilhar uma página da Web com seus amigos usando um aplicativo de rede social ou salvar um link em um aplicativo de anotações para se referir posteriormente.

Observação

Os exemplos de código neste artigo são de aplicativos UWP. Os aplicativos da área de trabalho devem usar o IDataTransferManagerInterop. Para obter mais informações e exemplos de código, consulte Exibir objetos de interface do usuário do WinRT que dependem do CoreWindow.

Você também pode consultar o exemplo do aplicativo de origem de conteúdo de compartilhamento do WPF e integrar as opções de compartilhamento em seu aplicativo do Windows para obter informações adicionais sobre o compartilhamento de dados em aplicativos da área de trabalho.

Configurar um manipulador de eventos

Adicione um manipulador de eventos DataRequested a ser chamado sempre que um usuário invocar o compartilhamento. Isso pode ocorrer quando o usuário toca em um controle em seu aplicativo (como um botão ou comando da barra de aplicativos) ou automaticamente em um cenário específico (se o usuário concluir um nível e obter uma pontuação alta, por exemplo).

DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += DataTransferManager_DataRequested;

Quando um evento DataRequested ocorre, seu aplicativo recebe um objeto DataRequest . Isso contém um DataPackage que você pode usar para fornecer o conteúdo que o usuário deseja compartilhar. Você deve fornecer um título e dados para compartilhar. Uma descrição é opcional, mas recomendada.

DataRequest request = args.Request;

Escolher dados

Você pode compartilhar vários tipos de dados, incluindo:

  • Texto sem formatação
  • URIs (Identificadores Uniformes de Recursos)
  • HTML
  • Texto formatado
  • Bitmaps
  • Arquivos
  • Dados personalizados definidos pelo desenvolvedor

O objeto DataPackage pode conter um ou mais desses formatos, em qualquer combinação. O exemplo a seguir demonstra o compartilhamento de texto.

request.Data.SetText("Hello world!");

Definir propriedades

Ao empacotar dados para compartilhamento, você pode fornecer uma variedade de propriedades que fornecem informações adicionais sobre o conteúdo que está sendo compartilhado. Essas propriedades ajudam os aplicativos de destino a melhorar a experiência do usuário. Por exemplo, uma descrição ajuda quando o usuário está compartilhando conteúdo com mais de um aplicativo. Adicionar uma miniatura ao compartilhar uma imagem ou um link para uma página da Web fornece uma referência visual ao usuário. Para obter mais informações, consulte DataPackagePropertySet.

Aviso

Todas as propriedades, exceto o título, são opcionais. A propriedade title é obrigatória e deve ser definida.

request.Data.Properties.Title = "Share Example";
request.Data.Properties.Description = "A demonstration on how to share";

Iniciar a interface de compartilhamento

Uma interface do usuário para compartilhamento é fornecida pelo sistema. Para iniciá-lo, chame o método ShowShareUI .

DataTransferManager.ShowShareUI();

Gerenciar erros

Na maioria dos casos, o compartilhamento de conteúdo é um processo simples. No entanto, há sempre uma chance de que algo inesperado possa acontecer. Por exemplo, o aplicativo pode exigir que o usuário selecione o conteúdo para compartilhamento, mas o usuário não selecionou nenhum. Para lidar com essas situações, use o método FailWithDisplayText , que exibirá uma mensagem para o usuário se algo der errado.

Adiar o compartilhamento com delegados

Às vezes, pode não fazer sentido preparar os dados que o usuário deseja compartilhar imediatamente. Por exemplo, se o aplicativo dá suporte ao envio de um arquivo de imagem grande em vários formatos possíveis diferentes, é ineficiente criar todas essas imagens antes que o usuário faça sua seleção.

Para resolver esse problema, um DataPackage pode conter um delegado – uma função que é chamada quando o aplicativo receptor solicita dados. É recomendável usar um delegado sempre que os dados que um usuário deseja compartilhar forem intensivos em recursos.

async void OnDeferredImageRequestedHandler(DataProviderRequest request)
{
    // Provide updated bitmap data using delayed rendering
    if (this.imageStream != null)
    {
        DataProviderDeferral deferral = request.GetDeferral();
        InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();

        // Decode the image.
        BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);

        // Re-encode the image at 50% width and height.
        BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);
        imageEncoder.BitmapTransform.ScaledWidth = (uint)(imageDecoder.OrientedPixelWidth * 0.5);
        imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
        await imageEncoder.FlushAsync();

        request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
        deferral.Complete();
    }
}

Consulte também