Condividi tramite


Iniziare a usare uno scanner di codice a barre della fotocamera

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

Nota

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

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

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

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

Nota

La funzionalità Webcam è necessaria affinché il decodificatore software riceva 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

Usare 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 viene applicato un filtro in base al 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 si prevede che l'elenco dei dispositivi cambi durante la durata dell'applicazione, usare DeviceInformation.FindAllAsync per ottenere uno snapshot monouso. Se tuttavia l'elenco di scanner di codice a barre potrebbe cambiare durante la durata dell'applicazione, usare invece DeviceWatcher.

Importante

L'uso di GetDefaultAsync per enumerare i dispositivi PointOfService può generare un comportamento incoerente perché restituisce solo il primo dispositivo trovato nella classe, che può cambiare da sessione a 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

Vedere Enumerare uno snapshot dei dispositivi per altre 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 altre 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 funzionante per le app UWP (Universal Windows Platform).

È possibile usare Codice a barreScanner.VideoDeviceID per distinguere tra scanner di codice a barre della fotocamera e scanner di codice a barre fisici. Un valore di VideoDeviceID non NULL indica che l'oggetto scanner di codice a barre della raccolta di dispositivi è uno scanner di codice a barre della fotocamera. Se sono disponibili 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)

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

All'avvio di DeviceWatcher (vedere Passaggio 4: Enumerare gli scanner di codice a barre), enumera ogni dispositivo connesso. Nel frammento di codice seguente viene aggiunto ogni scanner disponibile a una raccolta BarcodeScanner e la raccolta viene associata 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 SelectedIndex di ListBox cambia (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 BarcodeScanner.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 a 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.

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

Suggerimento

Vedere Ospitare un'anteprima per ospitare l'anteprima per lo scanner di codice a barre della fotocamera nell'applicazione.

Passaggio 8: Avviare la scansione

È possibile avviare il processo di scansione chiamando StartSoftwareTriggerAsync.

A seconda del valore di IsDisabledOnDataReceived, lo scanner potrebbe eseguire la scansione di un solo codice a barre e quindi interrompersi o eseguire continuamente la scansione finché non si chiama StopSoftwareTriggerAsync.

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

Valore Descrizione
Vero Scansione di un solo codice a barre e quindi interruzione
False Scansione continua di codici a barre senza interruzione

Vedi anche