Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describe cómo obtener datos de un escáner de códigos de barras en un objeto BarcodeScannerReport y comprender su formato y contenido.
Una vez que haya configurado el escáner de códigos de barras y escanee un código de barras, se genera el evento DataReceived. El ClaimedBarcodeScanner debe suscribirse a este evento. El evento DataReceived pasa un objeto BarcodeScannerDataReceivedEventArgs, que puede usar para acceder a los datos de código de barras.
Suscríbase al evento DataReceived
Una vez que tengas un ClaimedBarcodeScanner, utilízalo para suscribirte al evento DataReceived.
claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceived;
El controlador de eventos se le pasarán el ClaimedBarcodeScanner y el objeto BarcodeScannerDataReceivedEventArgs. Puede acceder a los datos de código de barras a través de la propiedad Report de este objeto, que es de tipo BarcodeScannerReport.
private async void ClaimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
// Parse the data
}
Obtención de los datos
Una vez que tenga el BarcodeScannerReport, puede acceder a los datos de código de barras y analizarlos. BarcodeScannerReport tiene tres propiedades:
- ScanData: El dato completo y sin formato de código de barras.
- ScanDataLabel: La etiqueta de código de barras decodificada, que no incluye el encabezado, la suma de comprobación y otra información variada.
- ScanDataType: tipo de etiqueta de código de barras descodificado. Los valores posibles se definen en la clase BarcodeSymbologies.
Si desea acceder a ScanDataLabel o ScanDataType, primero debe establecer IsDecodeDataEnabled en verdadero.
claimedBarcodeScanner.IsDecodeDataEnabled = true;
Obtención del tipo de datos de escaneo
Obtener el tipo de etiqueta de código de barras descodificado es bastante sencillo; simplemente llamamos a GetName en ScanDataType.
private string GetSymbology(BarcodeScannerDataReceivedEventArgs args)
{
return BarcodeSymbologies.GetName(args.Report.ScanDataType);
}
Obtener la etiqueta de datos del escaneo
Para obtener la etiqueta de código de barras descodificada, hay algunas cosas que debe tener en cuenta. Solo determinados tipos de datos contienen texto codificado, por lo que primero debe comprobar si la simbología se puede convertir en una cadena y, a continuación, convertir el búfer que obtenemos de ScanDataLabel a una cadena 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.";
}
}
Obtener los datos de escaneo sin procesar
Para obtener los datos completos y sin procesar del código de barras, simplemente convertimos el búfer que obtenemos de ScanData en una cadena.
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);
}
}
Estos datos suelen tener el formato entregado desde el escáner. Se eliminan el encabezado del mensaje y la información de la cola, ya que no contienen información útil para una aplicación y es probable que sean específicas del escáner.
La información de encabezado común es un carácter de prefijo (como un carácter STX). La información común del finalizador es un carácter de terminador (como un carácter ETX o CR) y un carácter de comprobación de bloqueo si el escáner genera uno.
Esta propiedad debe incluir un carácter de simbología si el analizador devuelve uno (por ejemplo, un A para UPC-A). También debe incluir dígitos de comprobación si están presentes en la etiqueta y devueltos por el escáner. (Tenga en cuenta que tanto los caracteres de simbología como los dígitos de verificación pueden estar presentes o no, dependiendo de la configuración del analizador. El escáner los devolverá si está presente, pero no los generará o calculará si están ausentes).
Algunos productos pueden marcarse con un código de barras complementario. Este código de barras se coloca normalmente a la derecha del código de barras principal y consta de dos o cinco caracteres adicionales de información. Si el escáner lee la mercancía que contiene códigos de barras principales y complementarios, los caracteres complementarios se anexan a los caracteres principales y el resultado se entrega a la aplicación como una etiqueta. (Tenga en cuenta que un analizador puede admitir una configuración que habilita o deshabilita la lectura de códigos complementarios).
Algunas mercancías pueden marcarse con varias etiquetas, a veces denominadas etiquetas multisymbol o etiquetas en capas. Estos códigos de barras normalmente se organizan verticalmente y pueden ser de la misma o diferente simbología. Si el escáner lee la mercancía que contiene varias etiquetas, cada código de barras se entrega a la aplicación como una etiqueta independiente. Esto es necesario debido a la falta actual de normalización de estos tipos de código de barras. Uno no puede determinar todas las variaciones basadas en los datos de código de barras individuales. Por lo tanto, la aplicación tendrá que determinar cuándo se ha leído un código de barras de varias etiquetas en función de los datos devueltos. (Tenga en cuenta que un escáner puede o no admitir la lectura de varias etiquetas).
Este valor se define antes de que se genere un evento DataReceived en la aplicación.
Soporte y comentarios
Encontrar respuestas a sus preguntas
¿Tiene preguntas? Pregúntanos en nuestro foro de preguntas y respuestas de docs con la etiqueta UWP o en Stack Overflow con la etiqueta pointofservice.
Ayúdenos a encontrar sus preguntas:
- Agregue la etiqueta pointofservice a su pregunta en Stack Overflow.
- Incluir el término "UWP" en tu publicación en el foro de preguntas y respuestas
Consulte también
- escáner de código de barras
- de clase ClaimedBarcodeScanner
- clase BarcodeScannerDataReceivedEventArgs
- clase BarcodeScannerReport
- Clase Simbolologías de Códigos de Barras