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 descreve como obter dados de um scanner de código de barras em um objeto BarcodeScannerReport e entender seu formato e conteúdo.
Depois de configurar o scanner de código de barras e escanear um código de barras, o evento DataReceived será gerado. O ClaimedBarcodeScanner deve se inscrever nesse evento. O evento DataReceived passa um objeto BarcodeScannerDataReceivedEventArgs , que você pode usar para acessar os dados do código de barras.
Assine o evento DataReceived
Depois de ter um ClaimedBarcodeScanner, use-o para assinar o evento DataReceived:
claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceived;
O manipulador de eventos receberá o ClaimedBarcodeScanner e um objeto BarcodeScannerDataReceivedEventArgs. Você pode acessar os dados do código de barras por meio da propriedade relatório
private async void ClaimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
// Parse the data
}
Obter os dados
Depois de ter o BarcodeScannerReport, você poderá acessar e interpretar os dados do código de barras. BarcodeScannerReport tem três propriedades:
- ScanData: os dados de código de barras completos e brutos.
- ScanDataLabel: o rótulo de código de barras decodificado, que não inclui o cabeçalho, a soma de verificação e outras informações diversas.
- ScanDataType: o tipo decodificado de rótulo de código de barras. Os valores possíveis são definidos na classe BarcodeSymbologies.
Se você quiser acessar o ScanDataLabel ou o ScanDataType, primeiro deverá definir IsDecodeDataEnabled para true.
claimedBarcodeScanner.IsDecodeDataEnabled = true;
Obter o tipo de dados de escaneamento
Para obter o tipo de etiqueta de código de barras decodificado, é bastante simples: basta chamar GetName em ScanDataType.
private string GetSymbology(BarcodeScannerDataReceivedEventArgs args)
{
return BarcodeSymbologies.GetName(args.Report.ScanDataType);
}
Obter o rótulo de dados de escaneamento
Para obter o rótulo de código de barras decodificado, há algumas coisas que você precisa estar ciente. Somente determinados tipos de dados contêm texto codificado, portanto, primeiro você deve verificar se a simbologia pode ser convertida em uma cadeia de caracteres e converter o buffer obtido de ScanDataLabel para uma cadeia de caracteres UTF-8 codificada.
private string GetDataLabel(BarcodeScannerDataReceivedEventArgs args)
{
uint scanDataType = args.Report.ScanDataType;
// Only certain data types contain encoded text.
// To keep this simple, we'll just decode a few of them.
if (args.Report.ScanDataLabel == null)
{
return "No data";
}
// This is not an exhaustive list of symbologies that can be converted to a string.
else if (scanDataType == BarcodeSymbologies.Upca ||
scanDataType == BarcodeSymbologies.UpcaAdd2 ||
scanDataType == BarcodeSymbologies.UpcaAdd5 ||
scanDataType == BarcodeSymbologies.Upce ||
scanDataType == BarcodeSymbologies.UpceAdd2 ||
scanDataType == BarcodeSymbologies.UpceAdd5 ||
scanDataType == BarcodeSymbologies.Ean8 ||
scanDataType == BarcodeSymbologies.TfStd)
{
// The UPC, EAN8, and 2 of 5 families encode the digits 0..9
// which are then sent to the app in a UTF8 string (like "01234").
return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanDataLabel);
}
// Some other symbologies (typically 2-D symbologies) contain binary data that
// should not be converted to text.
else
{
return "Decoded data unavailable.";
}
}
Obter os dados de escaneamento brutos
Para obter os dados brutos completos do código de barras, simplesmente convertemos o buffer obtido de ScanData em uma cadeia de caracteres.
private string GetRawData(BarcodeScannerDataReceivedEventArgs args)
{
// Get the full, raw barcode data.
if (args.Report.ScanData == null)
{
return "No data";
}
// Just to show that we have the raw data, we'll print the value of the bytes.
else
{
return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanData);
}
}
Normalmente, esses dados estão no formato fornecido pelo scanner. No entanto, as informações de cabeçalho e trailer da mensagem são removidas, pois não contêm informações úteis para um aplicativo e provavelmente serão específicas do scanner.
Informações comuns de cabeçalho incluem um caractere de prefixo (como um caractere STX). Informações comuns do trailer são um caractere de terminador (como um caractere ETX ou CR) e um caractere de verificação de bloco se um for gerado pelo scanner.
Essa propriedade deve incluir um caractere de simbologia se um for retornado pelo scanner (por exemplo, um A para UPC-A). Ele também deve incluir dígitos de verificação se eles estiverem presentes no rótulo e retornados pelo verificador. (Observe que os caracteres de simbologia e os dígitos de verificação podem ou não estar presentes, dependendo da configuração do scanner. O verificador os retornará se estiverem presentes, mas não os gerará ou os calculará se estiverem ausentes.)
Algumas mercadorias podem ser marcadas com um código de barras suplementar. Esse código de barras normalmente é colocado à direita do código de barras principal e consiste em dois ou cinco caracteres adicionais de informações. Se o verificador ler a mercadoria que contém códigos de barras principais e complementares, os caracteres complementares serão acrescentados aos caracteres principais e o resultado será entregue ao aplicativo como um rótulo. (Observe que um scanner pode dar suporte a uma configuração que habilita ou desabilita a leitura de códigos complementares.)
Algumas mercadorias podem ser marcadas com vários rótulos, às vezes chamadas rótulos multissibol ou rótulos em camadas. Esses códigos de barras normalmente são organizados verticalmente e podem ser da mesma simbologia ou simbologia diferente. Se o verificador ler a mercadoria que contém vários rótulos, cada código de barras será entregue ao aplicativo como um rótulo separado. Isso é necessário devido à atual falta de padronização desses tipos de código de barras. Não é possível determinar todas as variações com base nos dados de código de barras individuais. Portanto, o aplicativo precisará determinar quando um código de barras de vários rótulos foi lido com base nos dados retornados. (Observe que um scanner pode ou não dar suporte à leitura de vários rótulos.)
Esse valor é definido antes de um evento DataReceived ser gerado para o aplicativo.
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
- da classe ClaimedBarcodeScanner
- classe BarcodeScannerDataReceivedEventArgs
- classe BarcodeScannerReport
- classe BarcodeSymbologies