Поделиться через


Перечисление устройств службы

В этом разделе показано, как определить селектор устройств, используемый для запроса устройств, доступных в системе, и использовать этот селектор для перечисления устройств point of Service с помощью одного из следующих методов:

Метод 1.Использование средства выбора устройств

Отображение пользовательского интерфейса средства выбора устройства и выбор пользователя подключенного устройства. Этот метод обрабатывает обновление списка при подключении и удалении устройств, а также проще и безопаснее, чем другие методы.

Метод 2:Получение первого доступного устройства

Используйте GetDefaultAsync , чтобы получить доступ к первому доступному устройству в определенном классе устройства "Точка обслуживания".

Метод 3:Моментальный снимок устройств

Перечисление моментального снимка устройств point of Service, присутствующих в системе в определенный момент времени. Это полезно при создании собственного пользовательского интерфейса или необходимости перечисления устройств без отображения пользовательского интерфейса пользователю. FindAllAsync будет удерживать результаты до завершения всего перечисления.

Метод 4:Перечисление и просмотр

DeviceWatcher — это более мощная и гибкая модель перечисления, которая позволяет перечислять устройства, которые в настоящее время присутствуют, а также получать уведомления при добавлении или удалении устройств из системы. Это полезно, если вы хотите сохранить текущий список устройств в фоновом режиме для отображения в пользовательском интерфейсе, а не ожидания создания моментального снимка.

Определение селектора устройства

Селектор устройств позволяет ограничить поиск устройств при перечислении устройств. Это позволяет получить только соответствующие результаты и сократить время, необходимое для перечисления нужных устройств.

Вы можете использовать метод GetDeviceSelector для типа устройства, который вы ищете, и получить селектор устройства для этого типа. Например, с помощью PosPrinter.GetDeviceSelector вы сможете перечислить все posPrinters , подключенные к системе, включая USB, сетевые и принтеры Bluetooth POS.

using Windows.Devices.PointOfService;

string selector = POSPrinter.GetDeviceSelector();

Методы GetDeviceSelector для различных типов устройств:

Используя метод GetDeviceSelector, который принимает значение Pos Подключение ionTypes в качестве параметра, вы можете ограничить селектор перечислять локальные, сетевые или подключенные к Bluetooth устройства POS, уменьшая время выполнения запроса. В приведенном ниже примере показано использование этого метода для определения селектора, который поддерживает только локальные подключенные принтеры POS.

using Windows.Devices.PointOfService;

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

Совет

См. статью "Создание селектора устройства" для создания более сложных строк селектора.

Метод 1. Использование средства выбора устройств

Класс DevicePicker позволяет отображать всплывающее меню средства выбора, содержащее список устройств для пользователя. Свойство Filter можно использовать для выбора типов устройств, которые будут отображаться в средстве выбора. Это свойство имеет тип DevicePickerFilter. Вы можете добавить типы устройств в фильтр с помощью свойства SupportedDeviceClasses или SupportedDeviceSelectors .

Когда вы будете готовы показать средство выбора устройств, можно вызвать метод PickSingleDeviceAsync , который отобразит пользовательский интерфейс средства выбора и возвратит выбранное устройство. Необходимо указать прямоугольник, который определит, где отображается всплывающий элемент. Этот метод вернет объект DeviceInformation , поэтому для его использования с API точки службы необходимо использовать метод FromIdAsync для определенного класса устройства, который требуется. Свойство DeviceInformation.Id передается в качестве параметра deviceId метода и получает экземпляр класса устройства в качестве возвращаемого значения.

Следующий фрагмент кода создает DevicePicker, добавляет в него фильтр сканера штрихкодов, выбирает устройство, а затем создает объект BarcodeScanner на основе идентификатора устройства:

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;
}

Метод 2. Получение первого доступного устройства

Самый простой способ получить устройство Point of Service — использовать GetDefaultAsync , чтобы получить первое доступное устройство в классе устройств Point of Service.

В приведенном ниже примере показано использование GetDefaultAsync для BarcodeScanner. Шаблон кода аналогичен всем классам устройств Point of Service.

using Windows.Devices.PointOfService;

BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();

Внимание

GetDefaultAsync должен использоваться с осторожностью, так как он может возвращать другое устройство от одного сеанса к следующему. Многие события могут повлиять на это перечисление, что приводит к созданию другого первого доступного устройства, в том числе:

  • Изменение камер, подключенных к компьютеру
  • Изменение устройств точки обслуживания, подключенных к компьютеру
  • Изменение устройств, подключенных к сети, подключенных к сети
  • Изменение устройств Службы в точке Bluetooth в пределах диапазона компьютеров
  • Изменения конфигурации точки обслуживания
  • Установка драйверов или объектов службы OPOS
  • Установка расширений точки обслуживания
  • Обновление операционной системы Windows

Метод 3. Моментальный снимок устройств

В некоторых сценариях может потребоваться создать собственный пользовательский интерфейс или перечислить устройства без отображения пользовательского интерфейса пользователю. В этих ситуациях можно перечислить моментальный снимок устройств, которые в настоящее время подключены или связаны с системой с помощью DeviceInformation.FindAllAsync. Этот метод будет удерживать все результаты до завершения всего перечисления.

Совет

Рекомендуется использовать метод GetDeviceSelector с параметром Pos Подключение ionTypes при использовании FindAllAsync, чтобы ограничить запрос нужным типом подключения. Сетевые подключения и подключения Bluetooth могут отложить результаты, так как их перечисления должны завершиться до возврата результатов FindAllAsync .

Внимание

FindAllAsync возвращает массив устройств. Порядок этого массива может меняться с сеанса на сеанс, поэтому не рекомендуется полагаться на определенный порядок с помощью жестко закодированного индекса в массив. Используйте свойства DeviceInformation , чтобы отфильтровать результаты или предоставить пользовательский интерфейс для пользователя.

В этом примере используется селектор, определенный выше, для создания моментального снимка устройств с помощью FindAllAsync затем перечисляется каждый из элементов, возвращаемых коллекцией, и записывает имя устройства и идентификатор в выходные данные отладки.

using Windows.Devices.Enumeration;

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

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

Совет

При работе с API Windows.Devices.Enumeration часто требуется использовать объекты DeviceInformation для получения сведений об определенном устройстве. Например, свойство DeviceInformation.ID можно использовать для восстановления и повторного использования того же устройства, если оно доступно в будущем сеансе, а свойство DeviceInformation.Name можно использовать для отображения в приложении. Дополнительные сведения о доступных свойствах см. на справочной странице DeviceInformation .

Метод 4. Перечисление и просмотр

Более мощный и гибкий метод перечисления устройств создает DeviceWatcher. Наблюдатель за устройствами динамически перечисляет устройства, чтобы приложение получало уведомления, если устройства добавлены, удалены или изменены после завершения первоначального перечисления. DeviceWatcher позволит определить, когда подключенное к сети устройство подключено к сети, устройство Bluetooth находится в диапазоне, а также если локально подключенное устройство отключается, чтобы вы могли выполнить соответствующие действия в приложении.

В этом примере используется селектор, определенный выше, для создания DeviceWatcher , а также для определения обработчиков событий для добавленных, удаленных и обновленных уведомлений. Вам потребуется указать подробные сведения о действиях, которые вы хотите предпринять при каждом уведомлении.

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
}

Совет

Дополнительные сведения об использовании DeviceWatcher см. в разделе "Перечисление и просмотр устройств".

См. также

Поддержка и обратная связь

Получение ответов на вопросы

Есть вопросы? Попросите нас на форуме "Документы Q&A" с тегом UWP или Stack Overflow с тегом pointofservice.

Помогите нам найти свои вопросы: