이 항목에서는 UWP(유니버설 Windows 플랫폼) 바코드 스캐너 API를 사용하여 스캐너를 수동으로 구성하지 않고 바코드 기호를 처리하는 방법을 설명합니다.
바코드 기호는 데이터를 특정 바코드 형식에 매핑하는 것입니다. 몇 가지 일반적인 기호로는 UPC, 코드 128, QR 코드 등이 있습니다.
지원되는 기호 확인
애플리케이션을 여러 제조업체의 다양한 바코드 스캐너 모델과 함께 사용할 수 있으므로 스캐너를 쿼리하여 지원하는 기호 목록을 확인할 수 있습니다. 이는 애플리케이션에 모든 스캐너에서 지원되지 않을 수 있는 특정 기호가 필요하거나 스캐너에서 수동으로 또는 프로그래밍 방식으로 사용하지 않도록 설정된 기호를 사용하도록 설정해야 하는 경우에 유용할 수 있습니다.
BarcodeScanner.FromIdAsync사용하여 BarcodeScanner 개체가 있으면 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);
인식되는 기호 변경
경우에 따라 바코드 스캐너에서 지원하는 기호의 하위 집합을 사용할 수 있습니다. 이는 애플리케이션에서 사용하지 않으려는 기호를 차단하는 데 특히 유용합니다. 예를 들어 사용자가 올바른 바코드를 스캔하도록 하려면 항목 SKU를 획득할 때 UPC 또는 EAN으로 검사를 제한하고 일련 번호를 가져올 때 코드 128로 검사를 제한할 수 있습니다.
스캐너에서 지원하는 기호를 알게 되면 인식할 기호를 설정할 수 있습니다.
ClaimScannerAsync를 사용하여 ClaimedBarcodeScanner 개체를 설정한 후에 이 작업을 수행할 수 있습니다. 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. 다음 코드 스니펫은 ClaimedBarcodeScanner에 대한 Upca 기호의 특성을 조회합니다.
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;
}
숫자 전송 확인
기호에 설정할 수 있는 또 다른 특성은 확인 숫자가 원시 데이터의 일부로 호스트에 전송되는지 여부입니다. 이를 설정하기 전에 해당 바코드 기호 set이 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;
}
지원 및 피드백
질문에 대한 답변 찾기
질문이 있으세요? UWP 태그가 있는 Docs Q&A 포럼 또는 pointofservice 태그가 있는 Stack Overflow에 대해 문의하세요.
질문을 찾는 데 도움이 됩니다.
- pointofservice 태그를 Stack Overflow의 질문에 추가합니다.
- Q&A 포럼의 게시물에 "UWP" 용어 포함