Partilhar via


Integre aplicativos empacotados com o Windows Share

Este artigo explica como integrar aplicativos empacotados com o recurso Compartilhamento do Windows . Os aplicativos que são 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 se registrará como um Destino de Compartilhamento para receber e lidar com arquivos compartilhados dentro do aplicativo.

O que é Share Target?

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

Para que o registro de 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. 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 retorna o código de erro se ele não estiver sendo executado com a APPMODEL_ERROR_NO_PACKAGE identidade do pacote.

Pré-requisitos

Para oferecer suporte ao ShareTargetActivatedEventArgs, o aplicativo deve ser direcionado para 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.

Registre-se como um alvo de compartilhamento

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

Adicionar uma extensão de destino de compartilhamento ao appxmanifest

No Explorador de Soluções do Visual Studio, abra o arquivo package.appxmanifest do projeto de empacotamento na sua solução e adicione a extensão de alvo de partilha.

<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 à DataFormat configuração. Neste caso, a aplicação suporta a partilha de imagens, pelo que o DataFormat está definido como Bitmap.

Obter argumentos do evento de partilha

A partir do Windows 10, versão 1809, os aplicativos empacotados podem chamar o método AppInstance.GetActivatedEventArgs para recuperar certos tipos de informações de ativação do aplicativo durante a inicialização. Por exemplo, pode chamar este método para obter informações sobre a ativação da aplicação; se foi acionada ao abrir um ficheiro, ao clicar numa notificação interativa, ou ao usar um protocolo registado.

No entanto, as informações sobre a ativação de ShareTargetActivatedEventArgs são suportadas apenas no Windows 10, versão 2004 e versões posteriores. Assim, o aplicativo deve ser direcionado para dispositivos com esta versão mínima específica.

Para ver uma implementação do Windows App SDK, consulte o método OnLaunched na aplicação de exemplo Share Target.

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 de demonstração da Photo Store para obter uma implementação completa.

Manipular arquivos compartilhados

O trecho de código a seguir mostra como lidar com 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
}

Ver também