Lavoro con i simboli dello scanner di codice a barre
Questo argomento illustra come usare le API dello scanner per codice a barre della piattaforma UWP (Universal Windows Platform) per elaborare simboli di codice a barre senza configurare manualmente lo scanner.
Una simbologia del codice a barre è il mapping dei dati a un formato di codice a barre specifico. Alcuni simboli comuni includono UPC, Codice 128, Codice a matrice e così via.
Determinare quali simboli sono supportati
Poiché l'applicazione potrebbe essere usata con diversi modelli di scanner per codice a barre di più produttori, è possibile eseguire una query sullo scanner per determinare l'elenco di simboli supportati. Ciò può essere utile se l'applicazione richiede una simbologia specifica che potrebbe non essere supportata da tutti gli scanner o se è necessario abilitare simboli che sono stati disabilitati manualmente o a livello di codice nello scanner.
Dopo aver creato un oggetto BarcodeScanner usando BarcodeScanner.FromIdAsync, richiama GetSupportedSymbologiesAsync per ottenere un elenco di simboli supportati dal dispositivo.
Dall'esempio seguente si ricava un elenco dei simboli supportati dello scanner per codice a barre e li visualizza in un blocco di testo:
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");
}
}
Determinare se è supportata una simbologia specifica
Per determinare se lo scanner supporta una simbologia specifica, è possibile richiamare IsSymbologySupportedAsync.
L'esempio seguente verifica se lo scanner di codice a barre supporta la simbologia Code32 :
bool symbologySupported = await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32);
Modificare i simboli riconosciuti
In alcuni casi, è possibile usare un subset di simboli supportati dallo scanner di codice a barre. Ciò è particolarmente utile per bloccare simboli che non si intende usare nell'applicazione. Ad esempio, per garantire che un utente esegua l'analisi del codice a barre corretto, è possibile vincolare l'analisi a UPC o EAN durante l'acquisizione delle SKU di elementi e vincolare l'analisi al codice 128 durante l'acquisizione dei numeri di serie.
Dopo aver appreso i simboli supportati dallo scanner, è possibile impostare i simboli da riconoscere. Questa operazione può essere eseguita dopo aver stabilito un oggetto ClaimedBarcodeScanner usando ClaimScannerAsync. È possibile richiamare SetActiveSymbologiesAsync per abilitare un set specifico di simboli mentre quelli omessi dall'elenco sono disabilitati.
L'esempio seguente imposta i simboli attivi di uno scanner di codice a barre attestato su Code39 e Code39Ex:
private async void SetSymbologies(ClaimedBarcodeScanner claimedBarcodeScanner)
{
var symbologies = new List<uint>{ BarcodeSymbologies.Code39, BarcodeSymbologies.Code39Ex };
await claimedBarcodeScanner.SetActiveSymbologiesAsync(symbologies);
}
Attributi simbologia codice a barre
I simboli di codice a barre diversi possono avere attributi diversi, ad esempio supportando più lunghezze di decodifica, trasmettendo la cifra di controllo all'host come parte dei dati non elaborati e verificando la convalida delle cifre. Con la classe BarcodeSymbologyAttributes è possibile ottenere e impostare questi attributi per una determinata simbologia per codice a barre ClaimedBarcodeScanner.
È possibile ottenere gli attributi di una determinata simbologia con GetSymbologyAttributesAsync. Il frammento di codice seguente ottiene gli attributi della simbologia Upca per claimedBarcodeScanner.
BarcodeSymbologyAttributes barcodeSymbologyAttributes =
await claimedBarcodeScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.Upca);
Al termine della modifica degli attributi e pronti per impostarli, è possibile richiamare SetSymbologyAttributesAsync. Questo metodo restituisce un valore booleano, che è vero se gli attributi sono stati impostati correttamente.
bool success = await claimedBarcodeScanner.SetSymbologyAttributesAsync(
BarcodeSymbologies.Upca, barcodeSymbologyAttributes);
Limitare i dati di scansione in base alla lunghezza dei dati
Alcune simbologie sono di lunghezza variabile, ad esempio Codice 39 o Codice 128. I codici a barre di questi simboli possono trovarsi vicino l'uno all'altro e contenere dati diversi, spesso di lunghezza specifica. L'impostazione della lunghezza specifica dei dati necessari può impedire scansioni non valide.
Prima di impostare la lunghezza di decodifica, verificare se il simbolo di codice a barre supporta più lunghezze con IsDecodeLengthSupported. Una volta appreso che è supportato, è possibile impostare DecodeLengthKind, che è di tipo BarcodeSymbologyDecodeLengthKind. Questa proprietà può essere uno dei valori seguenti:
- AnyLength: decodifica le lunghezze di qualsiasi numero.
- Discrete: consente di decodificare le lunghezze dei caratteri a byte singolo DecodeLength1 or DecodeLength2 single-byte characters.
- Intervallo: lunghezze di decodifica tra i caratteri a byte singolo DecodeLength1 e DecodeLength2. L'ordine di DecodeLength1 e DecodeLength2 non è rilevante (può essere superiore o inferiore all'altro).
Infine, è possibile impostare i valori di DecodeLength1 e DecodeLength2 per controllare la lunghezza dei dati necessari.
Il seguente frammento di codice illustra l'impostazione della lunghezza di decodifica:
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;
}
Controllare la trasmissione delle cifre
Un altro attributo che è possibile impostare su una simbologia è se la cifra di controllo verrà trasmessa all'host come parte dei dati non elaborati. Prima di questa impostazione, assicurarsi che la simbologia supporti la trasmissione delle cifre di controllo con IsCheckDigitTransmissionSupported. Poi, impostare se la trasmissione delle cifre di controllo è abilitata con IsCheckDigitTransmissionEnabled.
Il frammento di codice seguente illustra l'impostazione della trasmissione delle cifre di controllo:
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;
}
Controllare la convalida delle cifre
È anche possibile impostare se la cifra di controllo del codice a barre verrà convalidata. Prima di questa impostazione, assicurarsi che la simbologia supporti la convalida delle cifre di controllo con IsCheckDigitTransmissionSupported. Impostare quindi se la convalida della cifra di controllo è abilitata con IsCheckDigitValidationEnabled.
Il frammento di codice seguente illustra l'impostazione della convalida delle cifre di controllo:
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;
}
Supporto, commenti e suggerimenti
Trova le risposte alle tue domande
Altre domande? Chiedi di noi sia sul forum Docs Q& utilizzando il tag UWP or on Stack Overflow con il tag pointofservice.
Aiutaci a individuare le tue domande:
- Aggiungere il tag pointofservice alla domanda in Stack Overflow.
- Includi il termine "UWP" nel tuo post sul forum Q&