Condividi tramite


Inizia a utilizzare uno scanner di codici a barre con fotocamera

Questo argomento descrive come configurare uno scanner di codice a barre della fotocamera di base in un'applicazione UWP.

Annotazioni

Il decodificatore software integrato in Windows 10/11 viene fornito da Digimarc Corporation.

I frammenti di codice seguenti sono solo a scopo dimostrativo. Per un esempio funzionante completo, vedere l'esempio dello scanner di codice a barre.

Passaggio 1: Aggiungere dichiarazioni di funzionalità al manifesto dell'app

  1. In Microsoft Visual Studio, in Esplora Soluzioni, apri la finestra di progettazione per il manifesto dell'applicazione facendo doppio clic sull'elemento package.appxmanifest.
  2. Selezionare la scheda Funzionalità .
  3. Selezionare le caselle per Webcam e PointOfService.

Annotazioni

La capacità della Webcam è necessaria affinché il decodificatore software riceva i fotogrammi dalla fotocamera per decodificare il codice a barre e fornire un'anteprima nell'applicazione.

Passaggio 2: Aggiungere direttive using

using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;

Passaggio 3: Definire il selettore del dispositivo

Utilizzare uno dei metodi BarcodeScanner.GetDeviceSelector per ottenere un oggetto BarcodeScanner per ogni scanner di codice a barre connesso.

Opzione A: Trovare tutti gli scanner di codice a barre

string selector = BarcodeScanner.GetDeviceSelector();

Opzione B: trovare tutti gli scanner di codice a barre in base all'ambito (per questo esempio, filtriamo su Tipo di connessione Locale)

string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Passaggio 4: Enumerare gli scanner di codice a barre

Se non prevedi che l'elenco dei dispositivi cambi durante la durata dell'applicazione, usa DeviceInformation.FindAllAsync per ottenere uno snapshot monouso. Tuttavia, se l'elenco di scanner di codice a barre potesse cambiare durante la durata della vita dell'applicazione, utilizzare invece un DeviceWatcher.

Importante

L'uso di GetDefaultAsync per enumerare i dispositivi PointOfService può comportare un comportamento incoerente perché restituisce solo il primo dispositivo trovato nella classe , che può passare dalla sessione alla sessione.

Opzione A: enumerare uno snapshot di tutti gli scanner di codice a barre connessi in base al selettore creato nel passaggio 3

In questo frammento di codice viene creato un oggetto DeviceInformationCollection e viene usato *DeviceInformation.FindAllAsync per popolarlo.

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Suggerimento

Consultare per un elenco di uno snapshot dei dispositivi per ulteriori informazioni sull'uso di DeviceInformation.FindAllAsync.

Opzione B: Enumerare gli scanner di codice a barre disponibili in base al selettore creato nel passaggio 3 e controllare le modifiche apportate alla raccolta

In questo frammento di codice viene creato un DeviceWatcher usando DeviceInformation.CreateWatcher.

DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();

Suggerimento

Per ulteriori informazioni, vedere Enumerare e controllare i dispositivi e DeviceWatcher.

Passaggio 5: Identificare gli scanner di codice a barre della fotocamera

Uno scanner di codice a barre della fotocamera è costituito da una fotocamera (collegata a un computer) combinata con un decodificatore software, che Windows associa dinamicamente per creare uno scanner di codice a barre completamente funzionale per le app UWP (Universal Windows Platform).

Codice a barreScanner.VideoDeviceID può essere usato per distinguere tra scanner di codice a barre della fotocamera e scanner di codice a barre fisici. Un VideoDeviceID non NULL indica che l'oggetto scanner di codici a barre della tua raccolta di dispositivi è uno scanner di codici a barre con fotocamera. Se si dispone di più scanner di codice a barre della fotocamera, è possibile creare una raccolta separata che esclude gli scanner di codice a barre fisici.

Gli scanner di codice a barre della fotocamera che usano il decodificatore fornito con Windows sono identificati come:

Microsoft BarcodeScanner (nome della fotocamera qui sopra)

Se ci sono più fotocamere integrate nello chassis del computer, il nome potrebbe distinguere fra la fotocamera anteriore e la fotocamera posteriore.

All'avvio del DeviceWatcher (vedere Passaggio 4: Enumerare gli scanner di codici a barre), elenca ogni dispositivo connesso. Nel frammento di codice seguente aggiungiamo ogni scanner disponibile a una raccolta BarcodeScanner e uniamo la raccolta a un ListBox.

ObservableCollection<BarcodeScanner> barcodeScanners = 
  new ObservableCollection<BarcodeScanner>();

private async void Watcher_Added(DeviceWatcher sender, DeviceInformation args)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        barcodeScanners.Add(new BarcodeScanner(args.Name, args.Id));

        // Select the first scanner by default.
        if (barcodeScanners.Count == 1)
        {
            ScannerListBox.SelectedIndex = 0;
        }
    });
}

Quando il SelectedIndex del ListBox modifiche (il primo elemento è selezionato per impostazione predefinita nel frammento precedente), viene eseguita una query sulle informazioni sul dispositivo (l'attività SelectScannerAsync viene implementata in Passaggio 6: Richiedere lo scanner di codice a barre della fotocamera).

private async void ScannerSelection_Changed(object sender, SelectionChangedEventArgs args)
{
    var selectedScannerInfo = (BarcodeScanner)args.AddedItems[0];
    var deviceId = selectedScannerInfo.DeviceId;

    await SelectScannerAsync(deviceId);
}

Passaggio 6: Richiedere lo scanner di codice a barre della fotocamera

Chiamare Codice a barreScanner.ClaimScannerAsync per ottenere l'uso esclusivo dello scanner di codice a barre della fotocamera.

private async Task SelectScannerAsync(string scannerDeviceId)
{
    selectedScanner = await BarcodeScanner.FromIdAsync(scannerDeviceId);

    if (selectedScanner != null)
    {
        claimedScanner = await selectedScanner.ClaimScannerAsync();
        if (claimedScanner != null)
        {
            await claimedScanner.EnableAsync();
        }
        else
        {
            rootPage.NotifyUser("Failed to claim the selected barcode scanner", NotifyType.ErrorMessage);
        }
    }
    else
    {
        rootPage.NotifyUser("Failed to create a barcode scanner object", NotifyType.ErrorMessage);
    }
}

Passaggio 7: Anteprima fornita dal sistema

È necessaria un'anteprima della fotocamera per aiutare l'utente a puntare la fotocamera verso un codice a barre. Windows offre un'anteprima della fotocamera di base che avvia una finestra di dialogo per controllare lo scanner di codice a barre della fotocamera.

Chiama ClaimedBarcodeScanner.ShowVideoPreview per aprire la finestra di dialogo e ClaimedBarcodeScanner.HideVideoPreview per chiuderla.

Suggerimento

Consulta Anteprima di hosting per integrare l'anteprima dello scanner di codici a barre della fotocamera nella tua applicazione.

Passaggio 8: Avviare l'analisi

È possibile avviare il processo di analisi chiamando StartSoftwareTriggerAsync.

A seconda del valore di IsDisabledOnDataReceived lo scanner potrebbe analizzare un solo codice a barre e quindi interrompersi o analizzare continuamente finché non viene chiamato StopSoftwareTriggerAsync.

Impostare il valore desiderato di "IsDisabledOnDataReceived" per controllare il comportamento dello scanner quando un codice a barre viene decodificato.

Valore Descrizione
Vero Analizza un solo codice a barre e quindi arresta
Falso Analizzare continuamente i codici a barre senza arrestare

Vedere anche