Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе объясняется, как использовать API сканера штрихкодов универсальной платформы Windows (UWP) для обработки символов штрихкода без ручной настройки сканера.
символики штрихкода — это сопоставление данных с определенным форматом штрихкода. Некоторые распространенные символы включают КОД 128, QR-код и т. д.
Определение поддерживаемых символов
Так как приложение может использоваться с разными моделями сканера штрихкодов от нескольких производителей, может потребоваться запросить сканер, чтобы определить список поддерживаемых символов. Это может быть полезно, если приложению требуется определенная символика, которая может не поддерживаться всеми сканерами или необходимо включить символы, которые были либо вручную, либо программно отключены на сканере.
После получения объекта BarcodeScanner с помощью BarcodeScanner.FromIdAsync, вызовите GetSupportedSymbologiesAsync, чтобы получить список символик, поддерживаемых устройством.
Следующий пример получает список поддерживаемых символов сканера штрихкодов и отображает их в текстовом блоке:
private void DisplaySupportedSymbologies(BarcodeScanner barcodeScanner, TextBlock textBlock)
{
var supportedSymbologies = await barcodeScanner.GetSupportedSymbologiesAsync();
foreach (uint item in supportedSymbologies)
{
string symbology = BarcodeSymbologies.GetName(item);
textBlock.Text += (symbology + "\n");
}
}
Определите, поддерживается ли определенная символика
Чтобы определить, поддерживает ли сканер определенную символику, можно вызвать IsSymbologySupportedAsync.
В следующем примере проверяется, поддерживает ли сканер штрихкодов символику Code32 :
bool symbologySupported = await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32);
Изменение распознаваемых символов
В некоторых случаях может потребоваться использовать подмножество символов, поддерживаемых сканером штрихкодов. Это особенно полезно для блокировки символов, которые вы не планируете использовать в приложении. Например, чтобы убедиться, что пользователь сканирует правильный штрихкод, можно ограничить сканирование UPC или EAN при получении номера SKU и ограничить сканирование кодом 128 при получении серийных номеров.
После того как вы знаете символы, поддерживаемые сканером, вы можете задать символы, которые вы хотите распознать. Это можно сделать после создания объекта ClaimedBarcodeScanner с помощью ClaimScannerAsync. Вы можете вызвать SetActiveSymbologiesAsync, чтобы включить определенный набор символов, при этом те, которые не включены в ваш список, будут отключены.
Следующий пример задает активные символики заявленного сканера штрихкодов: Code39 и Code39Ex.
private async void SetSymbologies(ClaimedBarcodeScanner claimedBarcodeScanner)
{
var symbologies = new List<uint>{ BarcodeSymbologies.Code39, BarcodeSymbologies.Code39Ex };
await claimedBarcodeScanner.SetActiveSymbologiesAsync(symbologies);
}
Атрибуты символики штрихкода
Различные символики штрихкодов могут иметь разные атрибуты, такие как поддержка нескольких длин декодирования, передача контрольной цифры на хост в виде необработанных данных и проверка этой цифры. С помощью класса BarcodeSymbologyAttributes можно получить и задать эти атрибуты для заданного ClaimedBarcodeScanner и системы кодирования штрихкода.
Атрибуты заданной символики можно получить с помощью GetSymbologyAttributesAsync. Следующий фрагмент кода получает атрибуты символики Upca для ClaimedBarcodeScanner.
BarcodeSymbologyAttributes barcodeSymbologyAttributes =
await claimedBarcodeScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.Upca);
После завершения изменения атрибутов и готовности к их настройке можно вызвать SetSymbologyAttributesAsync. Этот метод возвращает логическое значение , которое true, если атрибуты были успешно заданы.
bool success = await claimedBarcodeScanner.SetSymbologyAttributesAsync(
BarcodeSymbologies.Upca, barcodeSymbologyAttributes);
Ограничение данных сканирования по длине данных
Некоторые символы представляют собой переменную длину, например Код 39 или Код 128. Штрихкоды этих символик могут находиться рядом друг с другом и содержать разные данные, часто определённой длины. Установка конкретной длины данных, которые вам нужны, может предотвратить недопустимые сканирования.
Перед настройкой длины декодирования проверьте, поддерживает ли символика штрихкода несколько длин с IsDecodeLengthSupported. Как только вы узнаете, что это поддерживается, вы сможете задать DecodeLengthKind, который имеет тип BarcodeSymbologyDecodeLengthKind. Это свойство может быть любым из следующих значений:
- AnyLength: декодирование длины любого числа.
- Дискретные: декодировать длину либо DecodeLength1, либо DecodeLength2 однобайтовых символов.
- Диапазон: декодировать длины между DecodeLength1 и DecodeLength2 однобайтовых символов. Порядок DecodeLength1 и DecodeLength2 не имеет значения (каждый может быть выше или ниже другого).
Наконец, можно задать значения DecodeLength1 и DecodeLength2 , чтобы контролировать длину необходимых данных.
В следующем фрагменте кода показано, как задать длину декодирования:
private async Task<bool> SetDecodeLength(
ClaimedBarcodeScanner scanner,
uint symbology,
BarcodeSymbologyDecodeLengthKind kind,
uint decodeLength1,
uint decodeLength2)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsDecodeLengthSupported)
{
attributes.DecodeLengthKind = kind;
attributes.DecodeLength1 = decodeLength1;
attributes.DecodeLength2 = decodeLength2;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Проверка передачи цифр
Другой атрибут, который можно задать в символогии, — это будет ли контрольная цифра передаваться хосту как часть необработанных данных. Перед настройкой этого убедитесь, что симвология поддерживает передачу контрольных цифр с IsCheckDigitTransmissionSupported. Затем установите, включена ли передача контрольной цифры, с помощью IsCheckDigitTransmissionEnabled.
В следующем фрагменте кода показано, как установить проверку передачи цифр:
private async Task<bool> SetCheckDigitTransmission(ClaimedBarcodeScanner scanner, uint symbology, bool isEnabled)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsCheckDigitTransmissionSupported)
{
attributes.IsCheckDigitTransmissionEnabled = isEnabled;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Проверка контрольной цифры
Можно также задать, будет ли проверена цифра проверки штрихкода. Перед настройкой убедитесь, что симвология поддерживает проверку контрольной цифры с помощью IsCheckDigitValidationSupported. Затем задайте, включена ли проверка контрольной цифры с IsCheckDigitValidationEnabled
В следующем фрагменте кода показано, как установить проверку цифры:
private async Task<bool> SetCheckDigitValidation(ClaimedBarcodeScanner scanner, uint symbology, bool isEnabled)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsCheckDigitValidationSupported)
{
attributes.IsCheckDigitValidationEnabled = isEnabled;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Поддержка и обратная связь
Поиск ответов на ваши вопросы
У вас есть вопросы? Обратитесь к нам на форуме "Docs Q&A" с тегом UWP или на Stack Overflow с тегом pointofservice.
Помогите нам найти свои вопросы:
- Добавьте тег pointofservice к вопросу в Stack Overflow.
- Включите термин UWP в свой пост на форуме Q&A