Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico explica como usar as APIs de scanner de código de barras da Plataforma Universal do Windows (UWP) para processar simbologias de código de barras sem configurar manualmente o scanner.
Uma simbologia de código de barras é o mapeamento de dados para um formato específico de código de barras. Algumas simbologias comuns incluem UPC, Code 128, QR Code e assim por diante.
Determinar quais simbologias têm suporte
Como seu aplicativo pode ser usado com diferentes modelos de scanner de código de barras de vários fabricantes, convém consultar o scanner para determinar a lista de simbologias que ele dá suporte. Isso pode ser útil se o aplicativo exigir uma simbologia específica que pode não ser suportada por todos os scanners ou se você precisar habilitar simbologias que foram desabilitadas manual ou programaticamente no scanner.
Depois de obter um objeto BarcodeScanner usando BarcodeScanner.FromIdAsync, chame GetSupportedSymbologiesAsync para obter uma lista de simbologias suportadas pelo dispositivo.
O exemplo a seguir obtém uma lista das simbologias com suporte do scanner de código de barras e as exibe em um bloco de texto:
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");
}
}
Determinar se há suporte para uma simbologia específica
Para determinar se o scanner dá suporte a uma simbologia específica, você pode chamar IsSymbologySupportedAsync.
O exemplo a seguir verifica se o verificador de código de barras dá suporte à simbologia
bool symbologySupported = await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32);
Alterar quais simbologias são reconhecidas
Em alguns casos, talvez você queira usar um subconjunto de simbologias compatíveis com o scanner de código de barras. Isso é particularmente útil para bloquear simbologias que você não pretende usar em seu aplicativo. Por exemplo, para garantir que um usuário verifique o código de barras certo, você pode restringir a verificação para UPC ou EAN ao adquirir SKUs de item e restringir a verificação ao Código 128 ao adquirir números de série.
Depois de saber as simbologias compatíveis com o scanner, você pode definir as simbologias que deseja reconhecer. Isso pode ser feito após estabelecer um objeto ClaimedBarcodeScanner usando ClaimScannerAsync. Você pode chamar SetActiveSymbologiesAsync para habilitar um conjunto específico de simbologias enquanto as omitidas da sua lista estão desabilitadas.
O exemplo a seguir define as simbologias ativas de um scanner de código de barras reivindicado como Code39 e Code39Ex:
private async void SetSymbologies(ClaimedBarcodeScanner claimedBarcodeScanner)
{
var symbologies = new List<uint>{ BarcodeSymbologies.Code39, BarcodeSymbologies.Code39Ex };
await claimedBarcodeScanner.SetActiveSymbologiesAsync(symbologies);
}
Atributos de simbologia de código de barras
Diferentes simbologias de código de barras podem ter atributos diferentes, como dar suporte a vários comprimentos de decodificação, transmitir o dígito de verificação para o host como parte dos dados brutos e verificar a validação de dígito. Com a classe BarcodeSymbologyAttributes, você pode obter e definir esses atributos para um ClaimedBarcodeScanner específico e sua simbologia de código de barras.
Você pode obter os atributos de uma determinada simbologia com GetSymbologyAttributesAsync. O snippet de código a seguir obtém os atributos da simbologia Upca para um ClaimedBarcodeScanner.
BarcodeSymbologyAttributes barcodeSymbologyAttributes =
await claimedBarcodeScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.Upca);
Quando terminar de modificar os atributos e estiver pronto para defini-los, você poderá chamar SetSymbologyAttributesAsync. Esse método retorna um bool, que é verdadeiro se os atributos foram definidos com êxito.
bool success = await claimedBarcodeScanner.SetSymbologyAttributesAsync(
BarcodeSymbologies.Upca, barcodeSymbologyAttributes);
Restringir dados de verificação por tamanho de dados
Algumas simbologias são de comprimento variável, como Código 39 ou Código 128. Códigos de barras dessas simbologias podem ser localizados próximos uns dos outros, frequentemente contendo dados diferentes de comprimentos específicos. Definir o comprimento específico dos dados necessários pode impedir verificações inválidas.
Antes de definir o comprimento de decodificação, verifique se a simbologia do código de barras dá suporte a vários comprimentos com IsDecodeLengthSupported. Depois de saber que ele tem suporte, você pode definir o DecodeLengthKind, que é do tipo BarcodeSymbologyDecodeLengthKind. Essa propriedade pode ser qualquer um dos seguintes valores:
- AnyLength: decodificar comprimentos de qualquer número.
- Discreto: decodifique os comprimentos de DecodeLength1 ou DecodeLength2 caracteres de um único byte.
- Range: Decodificar comprimentos entre DecodeLength1 e DecodeLength2 caracteres de byte único. A ordem de DecodeLength1 e DecodeLength2 não importa (pode ser maior ou inferior à outra).
Por fim, você pode definir os valores de DecodeLength1 e DecodeLength2 para controlar o comprimento dos dados necessários.
O snippet de código a seguir demonstra como definir o comprimento de decodificação:
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;
}
Verificar a transmissão de dígito
Outro atributo que você pode definir em uma simbologia é se o dígito de verificação será transmitido para o host como parte dos dados brutos. Antes de definir isso, verifique se a simbologia suporta a transmissão de dígito de verificação com IsCheckDigitTransmissionSupported. Em seguida, defina se a transmissão de dígito de verificação está habilitada com IsCheckDigitTransmissionEnabled.
O snippet de código a seguir demonstra a configuração da transmissão de dígito de verificação:
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;
}
Verificar validação de dígito
Você também pode definir se o dígito de verificação do código de barras será validado. Antes de definir isso, verifique se a simbologia dá suporte à validação de dígito de verificação com IsCheckDigitValidationSupported. Em seguida, defina se a validação de dígito de verificação está habilitada com IsCheckDigitValidationEnabled.
O trecho de código a seguir demonstra a configuração da validação do dígito de verificação.
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;
}
Suporte e comentários
Encontrar respostas para suas perguntas
Tem dúvidas? Pergunte-nos em nosso fórum de Q&A do Docs com a tag UWP ou no Stack Overflow com a tag pointofservice.
Ajude-nos a localizar suas perguntas:
- Adicione a tag pointofservice à sua pergunta no Stack Overflow.
- Incluir o termo "UWP" em sua postagem no fórum de Q&A
Consulte também
- scanner de código de barras
- classe BarcodeSymbologies
- classe BarcodeScanner
- da classe ClaimedBarcodeScanner
- Classe AtributosDeSimbologiaDeCódigoDeBarras
- Enumeração BarcodeSymbologyDecodeLengthKind