Introduzione a uno scanner di codici a barre della fotocameraGetting started with a camera barcode scanner

I frammenti usati qui sono solo a scopo dimostrativo.The snippets used here are for demonstration purposes only. Per un esempio funzionante, vedere l' esempio di scanner di codice a barre.For a working sample, see the Barcode scanner sample.

Passaggio 1: aggiungere dichiarazioni di funzionalità al manifesto dell'applicazioneStep 1: Add capability declarations to your app manifest

  1. In Microsoft Visual Studio fai doppio clic sull'elemento package.appxmanifest in Esplora soluzioni per aprire la finestra di progettazione del manifesto dell'applicazione.In Microsoft Visual Studio, in Solution Explorer, open the designer for the application manifest by double-clicking the package.appxmanifest item.
  2. Selezionare la scheda funzionalitàSelect the Capabilities tab
  3. Selezionare le caselle per Webcam e PointOfServiceCheck the boxes for Webcam and PointOfService

Nota

La funzionalità Webcam è necessaria per consentire al decodificatore software di ricevere frame dalla fotocamera per decodificare e fornire un'anteprima dall'applicazioneThe Webcam capability is required to for the software decoder to receive frames from the camera to decode as well as to provide a preview from your application

Passaggio 2: aggiungere direttive usingStep 2: Add using directives

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

Passaggio 3: definire il selettore del dispositivoStep 3: Define your device selector

Opzione A: trovare tutti gli scanner di codice A barreOption A: Find all barcode scanners

string selector = BarcodeScanner.GetDeviceSelector();

Opzione B: ambito del selettore del dispositivo per il tipo di connessioneOption B: Scoping device selector to connection type

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

Passaggio 4: enumerare tutti gli scanner di codice a barreStep 4: Enumerate all barcode scanners

Se non si prevede che l'elenco dei dispositivi cambi per la durata dell'applicazione, è possibile enumerare uno snapshot una sola volta con DeviceInformation. findAllAsync.tuttavia, se si ritiene che l'elenco di scanner di codice a barre possa cambiare per la durata dell'applicazione, è consigliabile usare invece un DeviceWatcher .If you do not expect the list of devices to change over the lifespan of your application you can enumerate a snapshot just once with DeviceInformation.FindAllAsync, but if you believe that the list of barcode scanners could change over the lifespan of your application you should use a DeviceWatcher instead.

Importante

L'uso di GetDefaultAsync per enumerare i dispositivi PointOfService può causare un comportamento incoerente perché restituisce semplicemente il primo dispositivo trovato nella classe e può variare da una sessione all'altra.Using GetDefaultAsync to enumerate PointOfService devices can result in inconsistent behavior as it simply returns the first device found in the class and this can change from session to session.

Opzione A: enumerare uno snapshot di scanner di codice a barreOption A: Enumerate a snapshot of barcode scanners

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Suggerimento

Per altre informazioni sull'uso di FindAllAsync, vedere enumerare uno snapshot dei dispositivi .See Enumerate a snapshot of devices for more information on using FindAllAsync.

Opzione B: enumerare gli scanner di codice a barre disponibili e controllare le modifiche apportate agli scanner disponibiliOption B: Enumerate available barcode scanners and watch for changes to the available scanners

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 le modifiche apportate ai dispositivi e DeviceWatcher .See Enumerate and watch device changes and DeviceWatcher for more information.

Passaggio 5: identificare gli scanner di codici a barre della fotocameraStep 5: Identify camera barcode scanners

Uno scanner di codici A barre della fotocamera viene creato dinamicamente, in quanto Windows abbina le fotocamere collegate al computer con un decodificatore software.A camera barcode scanner is created dynamically as Windows pairs the camera(s) attached to your computer with a software decoder. Ogni coppia di decodificatori di fotocamere è uno scanner di codici a barre completamente funzionante.Each camera - decoder pair is a fully functional barcode scanner.

Per ogni scanner di codici a barre nella raccolta di dispositivi risultante, è possibile distinguere tra scanner di codici a barre e scanner di codici a barre fisici controllando la proprietà Barcodescanner. VideoDeviceID .For each barcode scanner in the resulting device collection, you can differentiate between camera barcode scanners and physical barcode scanners by checking the BarcodeScanner.VideoDeviceID property. Un VideoDeviceID non NULL indica che l'oggetto scanner di codice a barre dalla raccolta di dispositivi è uno scanner di codici a barre della fotocamera.A non-NULL VideoDeviceID indicates that the barcode scanner object from your device collection is a camera barcode scanner. Se si dispone di più scanner di codice a barre della fotocamera, potrebbe essere necessario creare una raccolta separata che escluda gli scanner di codici a barre fisici.If you have more than one camera barcode scanner you might want to build a separate collection which excludes physical barcode scanners.

Gli scanner di codici a barre della fotocamera che usano il decoder fornito con Windows sono identificati come:Camera barcode scanners using the decoder that ships with Windows are identified as:

Microsoft BarcodeScanner (nome della fotocamera qui)Microsoft BarcodeScanner (name of your camera here)

Se si dispone di più di una fotocamera e queste sono compilate nello chassis del computer, il nome potrebbe distinguere tra fotocamere anteriori e posteriori .If you have more than one camera, and they are built into the chassis of your computer, the name might differentiate between front and rear cameras.

Nota

In futuro, potrebbero essere rilasciati decodificatori software aggiuntivi con schemi di denominazione diversi.In the future, additional software decoders with different naming schemes might be released.

All'avvio del DeviceWatcher (passaggio 4), viene enumerato attraverso ogni dispositivo connesso.When the DeviceWatcher starts (step 4), it enumerates through each connected device. Qui si aggiungono gli scanner disponibili a una raccolta di scanner di codici a barre e si associa la raccolta a una casella di riepilogo.Here we add the available scanners to a barcode scanner collection and bind the collection to a ListBox.

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

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

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

Quando viene modificato il SelectedIndex della casella di riepilogo (il primo elemento è selezionato per impostazione predefinita nel frammento di codice precedente), vengono interrogate le informazioni sul dispositivo.When the SelectedIndex of the ListBox changes (the first item is selected by default in the previous snippet), we query the device info.

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

    await SelectScannerAsync(deviceId);
}

Passaggio 6: richiedere lo scanner di codici a barre della fotocameraStep 6: Claim the camera barcode scanner

Usare Barcodescanner. ClaimScannerAsync per ottenere l'uso esclusivo dello scanner di codici a barre della fotocamera.Use BarcodeScanner.ClaimScannerAsync to obtain exclusive use of the camera barcode scanner.

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 sistemaStep 7: System provided preview

È necessaria un'anteprima della fotocamera per fare in modo che l'utente Miri correttamente la fotocamera ai codici a barre.A camera preview is needed for the user to successfully aim the camera at barcodes. Windows offre una semplice anteprima della fotocamera che avvia una finestra di dialogo per il controllo di base dello scanner di codici a barre della fotocamera.Windows provides a simple camera preview that launches a dialog for basic control of the camera barcode scanner. È sufficiente chiamare ClaimedBarcodeScanner. ShowVideoPreview per aprire la finestra di dialogo e ClaimedBarcodeScanner. HideVideoPreview per chiuderla al termine dell'operazione.Simply call ClaimedBarcodeScanner.ShowVideoPreview to open the dialog and ClaimedBarcodeScanner.HideVideoPreview to close it when finished.

Suggerimento

Vedere l' Anteprima di hosting per ospitare l'anteprima per lo scanner di codici a barre della fotocamera nell'applicazione.See Hosting Preview to host the preview for camera barcode scanner in your application.

Passaggio 8: avviare l'analisiStep 8: Initiate scan

È possibile avviare il processo di analisi chiamando StartSoftwareTriggerAsync.You can initiate the scan process by calling StartSoftwareTriggerAsync.

A seconda del valore di IsDisabledOnDataReceived , lo scanner potrebbe analizzare un solo codice a barre, quindi arrestare o eseguire l'analisi continua fino a quando non si chiama StopSoftwareTriggerAsync.Depending on the value of IsDisabledOnDataReceived the scanner might scan only one barcode then stop or scan continuously until you call StopSoftwareTriggerAsync.

Impostare il valore desiderato di IsDisabledOnDataReceived per controllare il comportamento dello scanner quando viene decodificato un codice a barre.Set the desired value of IsDisabledOnDataReceived to control the scanner behavior when a barcode is decoded.

ValoreValue DescrizioneDescription
TrueTrue Analizza solo un codice a barre e quindi InterrompiScan only one barcode then stop
FalseFalse Analizza continuamente i codici a barre senza interruzioniContinuously scan barcodes without stopping

Vedere ancheSee also

EsempiSamples