Compartilhar via


Integrar aplicativos empacotados com o Windows Share

Este artigo explica como integrar aplicativos empacotados com o recurso Windows Share. Os aplicativos empacotados com MSIX têm identidade de pacote e estão prontos para se registrar como um Destino de compartilhamento. O recurso Compartilhar permite que os usuários compartilhem conteúdo de um aplicativo para outro. Um aplicativo empacotado será registrado como um Destino de compartilhamento para receber e manipular arquivos compartilhados dentro do aplicativo.

O que é Destino de compartilhamento?

O Destino de compartilhamento é um recurso que foi introduzido no Windows 8 e permite que um aplicativo receba dados de outro aplicativo. O Destino de compartilhamento funciona como uma Área de Transferência, mas com conteúdo dinâmico.

Para que o registro do destino de compartilhamento padrão funcione com aplicativos Win32, o aplicativo precisa ter uma identidade de pacote e também manipular os argumentos de compartilhamento como ShareTargetActivatedEventArgs, que é um objeto dinâmico do aplicativo de origem. Isso não é um conteúdo de memória estática que é enviado para o aplicativo de destino.

Observação

Em um aplicativo C++, use a API GetCurrentPackageFullName para verificar se o aplicativo em execução tem identidade de pacote. A API retornará o APPMODEL_ERROR_NO_PACKAGE código de erro se não estiver sendo executada com a identidade do pacote.

Pré-requisitos

Para oferecer suporte a ShareTargetActivatedEventArgs, o aplicativo deve ter como destino o Windows 10, versão 2004 (compilação 10.0.19041.0) ou posterior. Esta é a versão de destino mínima para o recurso.

Registrar-se como um Destino de compartilhamento

Há duas etapas necessárias para implementar o contrato de Compartilhamento no seu aplicativo.

Adicionar uma extensão de destino de compartilhamento ao appxmanifest

No Gerenciador de Soluções do Visual Studio, abra o arquivo package.appxmanifest do projeto de Empacotamento da sua solução e adicione a extensão de destino de compartilhamento.

<Extensions>
      <uap:Extension
          Category="windows.shareTarget">
        <uap:ShareTarget>
          <uap:SupportedFileTypes>
            <uap:SupportsAnyFileType />
          </uap:SupportedFileTypes>
          <uap:DataFormat>Bitmap</uap:DataFormat>
        </uap:ShareTarget>
      </uap:Extension>
</Extensions>

Adicione o formato de dados suportado pelo seu aplicativo à configuração DataFormat. Nesse caso, o aplicativo oferece suporte ao compartilhamento de imagens, portanto, o DataFormat é definido como Bitmap.

Buscar argumentos de evento de compartilhamento

Do Windows 10, versão 1809 em diante, os aplicativos empacotados podem chamar o método AppInstance.GetActivatedEventArgs para recuperar determinados tipos de informações de ativação de aplicativo durante a inicialização. Por exemplo, você pode chamar esse método para obter informações sobre a ativação do aplicativo; se ele foi acionado ao abrir um arquivo, ao clicar em uma notificação do sistema interativa ou ao usar um protocolo registrado.

No entanto, as informações de ativação do ShareTargetActivatedEventArgs têm suporte apenas no Windows 10, versão 2004 e posterior. Portanto, o aplicativo deve ser direcionado para dispositivos com essa versão mínima específica.

Para ver uma implementação do SDK de Aplicativos Windows, consulte o OnLaunched método no aplicativo de exemplo Destino de compartilhamento.

Para outros aplicativos empacotados, no Main método do aplicativo, verifique se há AppInstance.GetActivatedEventArgs.

public static void Main(string[] cmdArgs)
{
    ...
    if (isRunningWithIdentity())
    {
        var activationArgs = AppInstance.GetActivatedEventArgs();
        if (activationArgs != null)
        {
            switch (activationArgs.Kind)
            {
                case ActivationKind.Launch:
                    HandleLaunch(activationArgs as LaunchActivatedEventArgs);
                    break;
                case ActivationKind.ToastNotification:
                    HandleToastNotification(activationArgs as ToastNotificationActivatedEventArgs);                                     
                    break;
                case ActivationKind.ShareTarget:
                    HandleShareAsync(activationArgs as ShareTargetActivatedEventArgs);
                    break;
                default:
                    HandleLaunch(null);
                    break;
            }
        }
    }
}

Consulte o aplicativo Photo Store Demo para obter uma implementação completa.

Manipular arquivos compartilhados

O trecho de código a seguir mostra como manipular arquivos compartilhados em um aplicativo empacotado. O trecho de código faz parte do HandleShareAsync método que é chamado quando o aplicativo é ativado como um Destino de compartilhamento no exemplo anterior.

static async void HandleShareAsync(ShareTargetActivatedEventArgs args)
{
    ShareOperation shareOperation = args.ShareOperation;
    shareOperation.ReportStarted();

    if (shareOperation.Data.Contains( 
        Windows.ApplicationModel.DataTransfer.StandardDataFormats.StorageItems))
    {
        try
        {
            IReadOnlyList<IStorageItem> items = await shareOperation.Data.GetStorageItemsAsync();
            var file = (IStorageFile)items[0]; 
            string path = file.Path;
            var image = new ImageFile(path);
            image.AddToCache();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    shareOperation.ReportCompleted();

    // app launch code
}

Confira também