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


Начало работы с точкой обслуживания

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

Здесь вы узнаете об основах взаимодействия с устройствами Point of Service с помощью API-интерфейсов среда выполнения Windows точки обслуживания. Мы рассмотрим перечисление устройств, проверку возможностей устройств, утверждение устройств и общий доступ к устройствам. Мы используем устройство сканера штрихкодов в качестве примера, но практически все рекомендации, приведенные здесь, применяются к любому устройству, совместимому с UWP. (Список поддерживаемых устройств см. в разделе Поддержка устройств службы).

Поиск и подключение к периферийным устройствам точки обслуживания

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

Подключение к устройствам с помощью приложения "Параметры"

При подключении устройства point of Service, например сканера штрихкодов, он отображается так же, как и любое другое устройство. Его можно найти в разделе "Устройства > Bluetooth" и других устройств приложения "Параметры". Там можно связаться с устройством точки обслуживания, выбрав добавить Bluetooth или другое устройство.

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

Получение одного устройства службы с помощью GetDefaultAsync

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

using Windows.Devices.PointOfService;

BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();

Если устройство по умолчанию найдено, объект устройства, полученный, готов к утверждению. "Утверждение" устройство предоставляет приложению монопольный доступ к нему, предотвращая конфликтующие команды из нескольких процессов.

Примечание.

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

Перечисление коллекции устройств с помощью FindAllAsync

При подключении к нескольким устройствам необходимо перечислить коллекцию объектов устройств PointOfService , чтобы найти нужный объект. Например, следующий код создает коллекцию всех сканеров штрихкодов, подключенных в данный момент, а затем выполняет поиск коллекции для сканера с определенным именем.

using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;

string selector = BarcodeScanner.GetDeviceSelector();       
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

foreach (DeviceInformation devInfo in deviceCollection)
{
    Debug.WriteLine("{0} {1}", devInfo.Name, devInfo.Id);
    if (devInfo.Name.Contains("1200G"))
    {
        Debug.WriteLine(" Found one");
    }
}

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

При подключении к устройству может потребоваться ограничить поиск подмножеством периферийных устройств точки обслуживания, к которым имеет доступ ваше приложение. С помощью метода GetDeviceSelector можно ограничить выбор для получения устройств, подключенных только определенным методом (Bluetooth, USB и т. д.). Вы можете создать селектор, который ищет устройства через Bluetooth, IP-адрес, локальный или все типы подключений. Это может быть полезно, так как обнаружение беспроводных устройств занимает много времени по сравнению с локальным (проводным) обнаружением. Вы можете обеспечить детерминированное время ожидания подключения локального устройства, ограничивая FindAllAsync типами локальных подключений. Например, этот код извлекает все сканеры штрихкодов, доступные через локальное подключение.

string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Реагирование на изменения подключения устройства с помощью DeviceWatcher

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

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
}

Проверка возможностей устройства точки обслуживания

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

Примечание.

Символика — это сопоставление языка, которое используется штрихкодом для кодирования сообщений.

try
{
    BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(deviceId);
    if (await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32))
    {
        Debug.WriteLine("Has symbology");
    }
}
catch (Exception ex)
{
    Debug.WriteLine("FromIdAsync() - " - ex.Message);
}

Использование класса Device.Capabilities

Класс Device.Capabilities является атрибутом всех классов устройств Point of Service и может использоваться для получения общих сведений о каждом устройстве. Например, в этом примере определяется, поддерживает ли устройство статистические отчеты и, если это делает, извлекает статистику для всех поддерживаемых типов.

try
{
    if (barcodeScanner.Capabilities.IsStatisticsReportingSupported)
    {
        Debug.WriteLine("Statistics reporting is supported");

        string[] statTypes = new string[] {""};
        IBuffer ibuffer = await barcodeScanner.RetrieveStatisticsAsync(statTypes);
    }
}
catch (Exception ex)
{
    Debug.WriteLine("EX: RetrieveStatisticsAsync() - " - ex.Message);
}

Утверждение устройства точки обслуживания

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

try
{
    claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();
}
catch (Exception ex)
{
    Debug.WriteLine("EX: ClaimScannerAsync() - " - ex.Message);
}

Сохранение устройства

При использовании устройства точки обслуживания через сеть или подключение Bluetooth может потребоваться предоставить общий доступ к устройству с другими приложениями в сети. (Дополнительные сведения об этом см. в разделе Общий доступ к устройствам.) В других случаях может потребоваться сохранить устройство для длительного использования. В этом примере показано, как сохранить запрошенный сканер штрихкодов после того, как другое приложение запросило освобождение устройства.

claimedBarcodeScanner.ReleaseDeviceRequested += claimedBarcodeScanner_ReleaseDeviceRequested;

void claimedBarcodeScanner_ReleaseDeviceRequested(object sender, ClaimedBarcodeScanner e)
{
    e.RetainDevice();  // Retain exclusive access to the device
}

Входные и выходные данные

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

try
{
    claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();
    if (claimedBarcodeScanner != null)
    {
        claimedBarcodeScanner.DataReceived += claimedBarcodeScanner_DataReceived;
        claimedBarcodeScanner.IsDecodeDataEnabled = true;
        await claimedBarcodeScanner.EnableAsync();
    }
}
catch (Exception ex)
{
    Debug.WriteLine("EX: ClaimScannerAsync() - " - ex.Message);
}


void claimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
    string symbologyName = BarcodeSymbologies.GetName(args.Report.ScanDataType);
    var scanDataLabelReader = DataReader.FromBuffer(args.Report.ScanDataLabel);
    string barcode = scanDataLabelReader.ReadString(args.Report.ScanDataLabel.Length);
}

Совместное использование устройства между приложениями

Устройства точки обслуживания часто используются в тех случаях, когда несколько приложений должны получить доступ к ним в течение короткого периода. Устройство можно совместно использовать при локальном подключении к нескольким приложениям (USB или другое проводное подключение) или через сеть Bluetooth или IP-адрес. В зависимости от потребностей каждого приложения может потребоваться удалить его утверждение на устройстве. Этот код удаляет используемое устройство сканера штрихкодов, позволяя другим приложениям утверждать и использовать его.

if (claimedBarcodeScanner != null)
{
    claimedBarcodeScanner.Dispose();
    claimedBarcodeScanner = null;
}

Примечание.

Классы устройств "Точка обслуживания" и "Точка обслуживания" реализуют интерфейс IClosable. Если устройство подключено к приложению через сеть или Bluetooth, то и утверждения, и неисключенные объекты должны быть удалены, прежде чем другое приложение сможет подключиться.

См. также