Начало работы с сканером штрихкодов камеры
В этом разделе описывается настройка базового сканера штрихкодов камеры в приложении UWP.
Примечание.
Декодировщик программного обеспечения, встроенный в Windows 10/11, предоставляется Digimarc Corporation.
Следующие фрагменты кода предназначены только для демонстрационных целей. Полный рабочий пример см. в примере сканера штрихкодов.
Шаг 1. Добавление объявлений возможностей в манифест приложения
- В Microsoft Visual Studio в Обозреватель решений откройте конструктор манифеста приложения, дважды щелкнув элемент package.appxmanifest.
- Перейдите на вкладку Возможности.
- Установите флажки для веб-камеры и PointOfService.
Примечание.
Возможность веб-камеры необходима для получения кадров от камеры для декодирования штрихкода и предоставления предварительного просмотра в приложении.
Шаг 2. Добавление using
директив
using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;
Шаг 3. Определение селектора устройства
Используйте один из методов BarcodeScanner.GetDeviceSelector для получения объекта BarcodeScanner для каждого подключенного сканера штрихкодов.
Вариант A. Поиск всех сканеров штрихкодов
string selector = BarcodeScanner.GetDeviceSelector();
Вариант B. Поиск всех сканеров штрихкодов на основе области (например, мы фильтруем по типу локального подключения)
string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
Шаг 4. Перечисление сканеров штрихкодов
Если вы не ожидаете, что список устройств изменится в течение срока действия приложения, используйте DeviceInformation.FindAllAsync для получения однократного моментального снимка. Однако если список сканеров штрихкодов может измениться в течение срока существования приложения, используйте DeviceWatcher .
Внимание
Использование GetDefaultAsync для перечисления устройств PointOfService может привести к несогласованности поведения, так как оно возвращает только первое устройство, найденное в классе (которое может измениться с сеанса на сеанс).
Вариант A. Перечисление моментального снимка всех подключенных сканеров штрихкодов на основе селектора, созданного на шаге 3.
В этом фрагменте кода мы создадим объект DeviceInformationCollection и используем ***DeviceInformation.FindAllAsync для заполнения.
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
Совет
Дополнительные сведения об использовании DeviceInformation.FindAllAsync см. в статье "Перечисление моментального снимка устройств".
Вариант B. Перечисление доступных сканеров штрихкодов на основе селектора, созданного на шаге 3, и просмотрите изменения в этой коллекции.
В этом фрагменте кода мы создадим DeviceWatcher с помощью DeviceInformation.CreateWatcher.
DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();
Совет
Дополнительные сведения см. в разделе "Перечисление и просмотр устройств " и DeviceWatcher.
Шаг 5. Определение сканеров штрихкодов камеры
Сканер штрихкодов камеры состоит из камеры (подключенной к компьютеру) в сочетании с программным декодером, который Windows динамически объединяет для создания полнофункциональный сканер штрихкодов для приложений универсальная платформа Windows (UWP).
BarcodeScanner.VideoDeviceID можно использовать для различения сканеров штрихкодов камеры и физических сканеров штрихкодов. Значение, отличное от NULL VideoDeviceID, указывает, что объект сканера штрихкодов из коллекции устройств является сканером штрихкодов камеры. Если у вас несколько сканеров штрихкодов камеры, может потребоваться создать отдельную коллекцию, которая исключает физические сканеры штрихкодов.
Сканеры штрихкодов камеры с помощью декодера, который поставляется с Windows, определяются следующим образом:
Microsoft BarcodeScanner (имя камеры здесь)
Если есть более одной камеры, и они встроены в корпус компьютера, имя может различаться между передними и задними камерами.
При запуске DeviceWatcher (см. шаг 4. Перечисление сканеров штрихкодов), оно перечисляется через каждое подключенное устройство. В следующем фрагменте кода мы добавим каждый доступный сканер в коллекцию BarcodeScanner и привязываем коллекцию к ListBox.
ObservableCollection<BarcodeScanner> barcodeScanners =
new ObservableCollection<BarcodeScanner>();
private async void Watcher_Added(DeviceWatcher sender, DeviceInformation args)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
barcodeScanners.Add(new BarcodeScanner(args.Name, args.Id));
// Select the first scanner by default.
if (barcodeScanners.Count == 1)
{
ScannerListBox.SelectedIndex = 0;
}
});
}
При изменении SelectedIndex элемента ListBox (первый элемент выбран по умолчанию в предыдущем фрагменте), мы запрашиваем сведения об устройстве (SelectScannerAsync
задача реализована на шаге 6. Утверждение сканера штрихкодов камеры).
private async void ScannerSelection_Changed(object sender, SelectionChangedEventArgs args)
{
var selectedScannerInfo = (BarcodeScanner)args.AddedItems[0];
var deviceId = selectedScannerInfo.DeviceId;
await SelectScannerAsync(deviceId);
}
Шаг 6. Утверждение сканера штрихкодов камеры
Вызовите BarcodeScanner.ClaimScannerAsync , чтобы получить эксклюзивное использование сканера штрихкодов камеры.
private async Task SelectScannerAsync(string scannerDeviceId)
{
selectedScanner = await BarcodeScanner.FromIdAsync(scannerDeviceId);
if (selectedScanner != null)
{
claimedScanner = await selectedScanner.ClaimScannerAsync();
if (claimedScanner != null)
{
await claimedScanner.EnableAsync();
}
else
{
rootPage.NotifyUser("Failed to claim the selected barcode scanner", NotifyType.ErrorMessage);
}
}
else
{
rootPage.NotifyUser("Failed to create a barcode scanner object", NotifyType.ErrorMessage);
}
}
Шаг 7. Предоставленная система предварительной версии
Предварительный просмотр камеры необходим, чтобы помочь пользователю прицелиться к камере в штрихкоде. Windows предоставляет базовую предварительную версию камеры, которая запускает диалоговое окно для управления сканером штрихкодов камеры.
Вызовите ClaimedBarcodeScanner.ShowVideoPreview, чтобы открыть диалоговое окно и ClaimedBarcodeScanner.HideVideoPreview, чтобы закрыть его.
Совет
См. статью "Предварительная версия размещения", чтобы разместить предварительную версию для сканера штрихкодов камеры в приложении.
Шаг 8. Запуск сканирования
Процесс сканирования можно инициировать, вызвав StartSoftwareTriggerAsync.
В зависимости от значения IsDisabledOnDataReceived средство проверки может сканировать только один штрихкод, а затем непрерывно останавливать или сканировать до вызова StopSoftwareTriggerAsync.
Задайте требуемое значение IsDisabledOnDataReceived , чтобы управлять поведением сканера при декодировании штрихкода.
значение | Описание |
---|---|
Истина | Сканирование только одного штрихкода, а затем остановка |
False | Непрерывно сканировать штрихкоды без остановки |