Iniciar um app em um dispositivo remoto
Este artigo explica como iniciar um aplicativo do Windows em um dispositivo remoto.
A partir do Windows 10, versão 1607, um aplicativo UWP pode iniciar um aplicativo UWP ou um aplicativo da área de trabalho do Windows remotamente em outro dispositivo que também executa o Windows 10, versão 1607 ou posterior, desde que ambos os dispositivos sejam conectados com a mesma conta da Microsoft (MSA). Esse é o caso de uso mais simples do Project Rome.
O recurso de inicialização remota proporciona experiências de usuário orientadas à tarefa, em que um usuário pode iniciar uma tarefa em um dispositivo e concluí-la em outro. Por exemplo, se o usuário estiver ouvindo música pelo telefone no seu carro, ele pode transferir a funcionalidade de reprodução para o Xbox One quando chegar em casa. A inicialização remota permite que os aplicativos passem dados contextuais para o app remoto que será iniciado para retomar a tarefa de onde ela foi interrompida.
Configuração preliminar
Adicionar funcionalidade remoteSystem
Para seu app iniciar um app em um dispositivo remoto, você deve adicionar a funcionalidade remoteSystem
ao manifesto do pacote do aplicativo. Você pode usar o designer de manifesto do pacote para adicioná-lo selecionando Sistema Remoto na guia Funcionalidades ou pode adicionar manualmente a linha a seguir ao arquivo Package.appxmanifest do projeto.
<Capabilities>
<uap3:Capability Name="remoteSystem"/>
</Capabilities>
Habilite compartilhamento entre dispositivos
Além disso, o dispositivo cliente deve ser definido para permitir o compartilhamento entre dispositivos. Essa configuração, que é acessada em Configurações: Sistema>Experiências compartilhadas>Compartilhar em todos os dispositivos, é habilitada por padrão.
Localizar um dispositivo remoto
Primeiro você deve localizar o dispositivo ao qual deseja se conectar. Descobrir dispositivos remotos descreve em detalhes como fazer isso. Vamos usar uma abordagem simples aqui que omite a filtragem por tipo de dispositivo ou conectividade. Criaremos um inspetor de sistema remoto que procura por dispositivos remotos e grava manipuladores dos eventos que são acionados quando dispositivos são descobertos ou removidos. Isso nos fornecerá uma coleção de dispositivos remotos.
O código nestes exemplos exige que você tenha uma instrução using Windows.System.RemoteSystems
no(s) seu(s) arquivo(s) de classe.
private async Task BuildDeviceList()
{
RemoteSystemAccessStatus accessStatus = await RemoteSystem.RequestAccessAsync();
if (accessStatus == RemoteSystemAccessStatus.Allowed)
{
m_remoteSystemWatcher = RemoteSystem.CreateWatcher();
// Subscribing to the event raised when a new remote system is found by the watcher.
m_remoteSystemWatcher.RemoteSystemAdded += RemoteSystemWatcher_RemoteSystemAdded;
// Subscribing to the event raised when a previously found remote system is no longer available.
m_remoteSystemWatcher.RemoteSystemRemoved += RemoteSystemWatcher_RemoteSystemRemoved;
m_remoteSystemWatcher.Start();
}
}
A primeira coisa que você deve fazer antes de fazer uma inicialização remota é chamar RemoteSystem.RequestAccessAsync()
. Verifique o valor de retorno para confirmar se seu aplicativo tem permissão para acessar dispositivos remotos. Uma razão para essa verificação falhar seria você não ter adicionado a funcionalidade remoteSystem
ao seu aplicativo.
Os manipuladores de eventos do inspetor de sistema são chamados quando um dispositivo ao qual nos conectamos é descoberto ou não está mais disponível. Usaremos esses manipuladores de eventos para manter uma lista atualizada de dispositivos ao quais podemos nos conectar.
private void RemoteSystemWatcher_RemoteSystemRemoved(
RemoteSystemWatcher sender, RemoteSystemRemovedEventArgs args)
{
if ( m_deviceMap.ContainsKey(args.RemoteSystemId))
{
m_deviceList.Remove(m_deviceMap[args.RemoteSystemId]);
m_deviceMap.Remove(args.RemoteSystemId);
}
}
private void RemoteSystemWatcher_RemoteSystemAdded(
RemoteSystemWatcher sender, RemoteSystemAddedEventArgs args)
{
m_deviceList.Add(args.RemoteSystem);
m_deviceMap.Add(args.RemoteSystem.Id, args.RemoteSystem);
}
Rastrearemos os dispositivos por ID de sistema remoto usando um Dicionário. Uma ObservableCollection é usada para manter a lista de dispositivos que podemos enumerar. Uma ObservableCollection também torna fácil associar a lista de dispositivos à interface do usuário, mas não faremos isso neste exemplo.
private RemoteSystemWatcher m_remoteSystemWatcher;
private ObservableCollection<RemoteSystem> m_deviceList = new ObservableCollection<RemoteSystem>();
private Dictionary<string, RemoteSystem> m_deviceMap = new Dictionary<string, RemoteSystem>();
Adicione uma chamada para BuildDeviceList()
no código de inicialização do aplicativo antes de tentar iniciar um aplicativo remoto.
Iniciar um app em um dispositivo remoto
Inicie um app remotamente passando o dispositivo ao qual você deseja se conectar à API RemoteLauncher.LaunchUriAsync. Há três sobrecargas para esse método. A mais simples, que este exemplo demonstra, especifica o URI que ativará o app no dispositivo remoto. Neste exemplo o URI abre o aplicativo Mapas no computador remoto com uma exibição 3D do Space Needle.
Outras sobrecargas RemoteLauncher.LaunchUriAsync permitem especificar opções como o URI do site para visualizar se nenhum app adequado pode ser iniciado no dispositivo remoto e uma lista opcional de nomes da família de pacotes que pode ser usada para iniciar o URI no dispositivo remoto. Você também pode fornecer dados na forma de pares chave/valor. Você pode passar dados ao app que está ativando para fornecer contexto para o app remoto, como o nome da música a ser reproduzida e o local de reprodução atual ao transferir a reprodução de um dispositivo para outro.
Em cenários práticos, você pode fornecer a interface do usuário para selecionar o dispositivo de destino. Mas, para simplificar este exemplo, usaremos apenas o primeiro dispositivo remoto da lista.
if ( m_deviceList.Count > 0)
{
RemoteSystem SelectedDevice = m_deviceList[0];
RemoteLaunchUriStatus launchUriStatus =
await RemoteLauncher.LaunchUriAsync(
new RemoteSystemConnectionRequest(SelectedDevice),
new Uri("bingmaps:?cp=47.6204~-122.3491&sty=3d&rad=200&pit=75&hdg=165"));
}
O objeto RemoteLaunchUriStatus retornado de RemoteLauncher.LaunchUriAsync() fornece informações sobre o êxito da inicialização remota e, em caso negativo, o motivo.
Tópicos relacionados
Referência de API de sistemas remotos
Visão geral de aplicativos e dispositivos conectados (Project Rome)
Descobrir dispositivos remotos
Exemplo de sistemas remotos demonstra como descobrir um sistema remoto, iniciar um apps em um sistema remoto e usar os serviços de apps para enviar mensagens entre apps em execução em dois sistemas.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de