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
- Visão geral da implantação do SDK do Aplicativo do Windows
- Criar seu primeiro projeto da WinUI 3
- Migrar da UWP para o SDK do Aplicativo Windows
- Vantagens e desvantagens de empacotar um aplicativo - Visão geral da implantação
- Identidade, registro e ativação de aplicativos Win32 não empacotados
- Implementação do Contrato de compartilhamento para o aplicativo WinAppSDK
- Implementação do Contrato de compartilhamento para aplicativos empacotados com localização externa
- Obter informações de ativação para aplicativos empacotados
- Referência de esquema ShareTarget
Windows developer