Compartilhar via


Enumerar dispositivos de ponto de serviço

Este tópico demonstra como definir um seletor de dispositivo que é usado para consultar dispositivos disponíveis para o sistema e usar esse seletor para enumerar dispositivos de ponto de serviço usando um dos seguintes métodos:

Método 1: Usar um seletor de dispositivos

Exiba uma interface do usuário do seletor de dispositivos e peça ao usuário que escolha um dispositivo conectado. Esse método lida com a atualização da lista quando os dispositivos são conectados e removidos, e é mais simples e seguro do que os outros métodos.

Método 2: Obtenha o primeiro dispositivo disponível

Use GetDefaultAsync para acessar o primeiro dispositivo disponível em uma classe de dispositivo de ponto de serviço específica.

Método 3: instantâneo de dispositivos

Enumere um instantâneo de dispositivos de ponto de serviço que estão presentes no sistema em um determinado ponto no tempo. Isso é útil quando você deseja criar sua própria interface do usuário ou precisa enumerar dispositivos sem exibir uma interface do usuário para o usuário. FindAllAsync reterá os resultados até que toda a enumeração seja concluída.

Método 4: Enumerar e observar

O DeviceWatcher é um modelo de enumeração mais poderoso e flexível que permite enumerar dispositivos que estão presentes no momento e também receber notificações quando dispositivos são adicionados ou removidos do sistema. Isso é útil quando você deseja manter uma lista atual de dispositivos na tela de fundo para exibição em sua interface do usuário, em vez de esperar que um instantâneo ocorra.

Definir um seletor de dispositivo

Um seletor de dispositivo permite limitar os dispositivos que você está pesquisando ao enumerar dispositivos. Isso permite que você obtenha apenas resultados relevantes e reduza o tempo necessário para enumerar os dispositivos desejados.

É possível usar o método GetDeviceSelector para o tipo de dispositivo que está procurando e obter o seletor de dispositivo para esse tipo. Por exemplo, usar PosPrinter.GetDeviceSelector fornecerá um seletor para enumerar todas as PosPrinters conectadas ao sistema, incluindo USB, impressoras PDV de rede e Bluetooth.

using Windows.Devices.PointOfService;

string selector = POSPrinter.GetDeviceSelector();

Os métodos GetDeviceSelector para os diferentes tipos de dispositivo são:

Usando um método GetDeviceSelector que usa um valor PosConnectionTypes como parâmetro, é possível restringir seu seletor para enumerar dispositivos POS locais, de rede ou conectados por Bluetooth, reduzindo o tempo necessário para a conclusão da consulta. O exemplo abaixo mostra o uso desse método para definir um seletor que ofereça suporte apenas a impressoras PDV conectadas localmente.

using Windows.Devices.PointOfService;

string selector = POSPrinter.GetDeviceSelector(PosConnectionTypes.Local);

Dica

Consulte Criar um seletor de dispositivo para criar sequências de seletor mais avançadas.

Método 1:usar um seletor de dispositivos

A classe DevicePicker permite que você exiba um submenu de seletor que contém uma lista de dispositivos para o usuário escolher. É possível usar a propriedade Filter para escolher quais tipos de dispositivos serão exibidos no seletor. Essa propriedade é do tipo DevicePickerFilter. É possível adicionar tipos de dispositivo ao filtro usando a propriedade SupportedDeviceClasses ou SupportedDeviceSelectors.

Quando estiver pronto para mostrar o seletor de dispositivos, será possível chamar o método PickSingleDeviceAsync, que mostrará a interface do usuário do seletor e retornará o dispositivo selecionado. Você precisará especificar um Rect que determinará onde o submenu será exibido. Esse método retornará um objeto DeviceInformation, portanto, para usá-lo com as APIs do Ponto de Serviço, você precisará usar o método FromIdAsync para a classe de dispositivo específica desejada. Passe a propriedade DeviceInformation.Id como o parâmetro deviceId do método e obtenha uma instância da classe do dispositivo como o valor retornado.

O snippet de código a seguir cria um DevicePicker, adiciona um filtro de scanner de código de barras a ele, faz com que o usuário escolha um dispositivo e, em seguida, cria um objeto BarcodeScanner com base na identificação do dispositivo:

private async Task<BarcodeScanner> GetBarcodeScanner()
{
    DevicePicker devicePicker = new DevicePicker();
    devicePicker.Filter.SupportedDeviceSelectors.Add(BarcodeScanner.GetDeviceSelector());
    Rect rect = new Rect();
    DeviceInformation deviceInformation = await devicePicker.PickSingleDeviceAsync(rect);
    BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(deviceInformation.Id);
    return barcodeScanner;
}

Método 2: obter o primeiro dispositivo disponível

A maneira mais simples de obter um dispositivo de Ponto de Serviço é usar GetDefaultAsync para obter o primeiro dispositivo disponível dentro de uma classe de dispositivo de Ponto de Serviço.

O exemplo abaixo ilustra o uso de GetDefaultAsync para BarcodeScanner. O padrão de codificação é semelhante para todas as classes de dispositivo de ponto de serviço.

using Windows.Devices.PointOfService;

BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();

Cuidado

GetDefaultAsync deve ser usado com cuidado, pois pode retornar um dispositivo diferente de uma sessão para a próxima. Muitos eventos podem influenciar essa enumeração, resultando em um primeiro dispositivo disponível diferente, incluindo:

  • Alterar as câmeras conectadas ao computador
  • Alterar os dispositivos de ponto de serviço conectados ao computador
  • Alterar os dispositivos de ponto de serviço conectados à rede disponíveis na rede
  • Alterar os dispositivos de ponto de serviço Bluetooth dentro do alcance do computador
  • Alterações na configuração do serviço
  • Instalação de drivers ou objetos de serviço OPOS
  • Instalação de extensões de Ponto de Serviço
  • Atualização para o sistema operacional Windows

Método 3: instantâneo de dispositivos

Em alguns cenários, talvez você queira criar sua própria interface do usuário ou precise enumerar dispositivos sem exibir uma interface do usuário para o usuário. Nessas situações, é possível enumerar um instantâneo dos dispositivos que estejam atualmente conectados ou emparelhados com o sistema usando DeviceInformation.FindAllAsync. Esse método reterá os resultados até que toda a enumeração seja concluída.

Dica

É recomendável usar o método GetDeviceSelector com o parâmetro PosConnectionTypes ao usar FindAllAsync para limitar sua consulta ao tipo de conexão desejado. As conexões de rede e Bluetooth podem atrasar os resultados, pois suas enumerações devem ser concluídas antes que os resultados do FindAllAsync sejam retornados.

Cuidado

FindAllAsync retorna uma matriz de dispositivos. A ordem dessa matriz pode mudar de sessão para sessão, portanto, não é recomendável confiar em uma ordem específica usando um índice codificado na matriz. Use as propriedades DeviceInformation para filtrar os resultados ou fornecer uma interface do usuário para o usuário escolher.

Este exemplo usa o seletor definido acima para tirar um instantâneo de dispositivos usando FindAllAsync e, em seguida, enumera por meio de cada um dos itens retornados pela coleção e grava o nome do dispositivo e ID na saída de depuração.

using Windows.Devices.Enumeration;

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

foreach (DeviceInformation devInfo in deviceCollection)
{
    Debug.WriteLine("{0} {1}", devInfo.Name, devInfo.Id);
}

Dica

Ao trabalhar com as APIs Windows.Devices.Enumeration, você frequentemente precisará usar objetos DeviceInformation para obter informações sobre um dispositivo específico. Por exemplo, a propriedade DeviceInformation.ID pode ser usada para recuperar e reutilizar o mesmo dispositivo se estiver disponível em uma sessão futura e a propriedade DeviceInformation.Name pode ser usada para fins de exibição no aplicativo. Consulte a página de referência DeviceInformation para obter informações sobre propriedades adicionais disponíveis.

Método 4: enumerar e observar

Um método mais poderoso e flexível de enumerar dispositivos é criar um DeviceWatcher. Um observador de dispositivos enumera dispositivos dinamicamente, para que o aplicativo receba notificações se os dispositivos forem adicionados, removidos ou alterados após a conclusão da enumeração inicial. Um DeviceWatcher permitirá que você detecte quando um dispositivo conectado à rede fica online, um dispositivo Bluetooth está no alcance, bem como se um dispositivo conectado localmente está desconectado para que você possa executar a ação apropriada no aplicativo.

Este exemplo usa o seletor definido acima para criar um DeviceWatcher, e também define manipuladores de eventos para as notificações Adicionadas, Removidas e Atualizadas. Você precisará preencher os detalhes das ações que deseja realizar em cada notificação.

using Windows.Devices.Enumeration;

DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
deviceWatcher.Added += DeviceWatcher_Added;
deviceWatcher.Removed += DeviceWatcher_Removed;
deviceWatcher.Updated += DeviceWatcher_Updated;

void DeviceWatcher_Added(DeviceWatcher sender, DeviceInformation args)
{
    // TODO: Add the DeviceInformation object to your collection
}

void DeviceWatcher_Removed(DeviceWatcher sender, DeviceInformationUpdate args)
{
    // TODO: Remove the item in your collection associated with DeviceInformationUpdate
}

void DeviceWatcher_Updated(DeviceWatcher sender, DeviceInformationUpdate args)
{
    // TODO: Update your collection with information from DeviceInformationUpdate
}

Dica

Consulte Enumerar e observar dispositivos para obter mais detalhes sobre o uso de um DeviceWatcher.

Confira também

Suporte e comentários

Encontrar respostas para suas dúvidas

Tem dúvidas? Pergunte-nos em nosso fórum de P e R do Docs com a tag UWP ou no Stack Overflow com a tag pointofservice.

Ajude-nos a localizar suas perguntas:

  • Adicione a tag pointofservice à pergunta sobre Stack Overflow.
  • Incluir o termo "UWP" na sua postagem no fórum de P e R