Introducción a un escáner de código de barras de cámaraGetting started with a camera barcode scanner

Los fragmentos de código usados aquí son solo para fines de demostración.The snippets used here are for demonstration purposes only. Para obtener un ejemplo práctico, vea el ejemplo de escáner de código de barras.For a working sample, see the Barcode scanner sample.

Paso 1: agregar declaraciones de funcionalidad al manifiesto de la aplicaciónStep 1: Add capability declarations to your app manifest

  1. En Microsoft Visual Studio, en el Explorador de soluciones, abre el diseñador para el manifiesto de la aplicación haciendo doble clic en el elemento package.appxmanifest.In Microsoft Visual Studio, in Solution Explorer, open the designer for the application manifest by double-clicking the package.appxmanifest item.
  2. Seleccione la pestaña capacidades .Select the Capabilities tab
  3. Active las casillas de cámara web y PointOfServiceCheck the boxes for Webcam and PointOfService

Nota

La funcionalidad de cámara web es necesaria para que el descodificador de software reciba fotogramas de la cámara para descodificarlos, así como para proporcionar una vista previa de la aplicación.The 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

Paso 2: agregar directivas UsingStep 2: Add using directives

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

Paso 3: definición del selector de dispositivosStep 3: Define your device selector

Opción A: Buscar todos los escáneres de códigos de barrasOption A: Find all barcode scanners

string selector = BarcodeScanner.GetDeviceSelector();

Opción B: ámbito del selector de dispositivos para el tipo de conexiónOption B: Scoping device selector to connection type

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

Paso 4: enumerar todos los escáneres de códigos de barrasStep 4: Enumerate all barcode scanners

Si no espera que la lista de dispositivos cambie a lo largo de la vida útil de la aplicación, puede enumerar una instantánea una sola vez con DeviceInformation. FindAllAsync, pero si cree que la lista de escáneres de códigos de barras podría cambiar durante el tiempo de vida de la aplicación, debe usar una DeviceWatcher en su lugar.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

El uso de GetDefaultAsync para enumerar dispositivos PointOfService puede producir un comportamiento incoherente, ya que simplemente devuelve el primer dispositivo que se encuentra en la clase y esto puede cambiar de una sesión a una sesión.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.

Opción A: enumerar una instantánea de los escáneres de código de barrasOption A: Enumerate a snapshot of barcode scanners

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Sugerencia

Vea enumerar una instantánea de los dispositivos para obtener más información sobre el uso de FindAllAsync.See Enumerate a snapshot of devices for more information on using FindAllAsync.

Opción B: enumerar los escáneres de códigos de barras disponibles y ver los cambios en los escáneres disponiblesOption 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();

Sugerencia

Consulte enumeración y inspección de los cambios de los dispositivos y la DeviceWatcher para obtener más información.See Enumerate and watch device changes and DeviceWatcher for more information.

Paso 5: identificación de los escáneres de códigos de barras de la cámaraStep 5: Identify camera barcode scanners

Un escáner de código de barras de la cámara se crea dinámicamente a medida que Windows empareja las cámaras conectadas al equipo con un descodificador de software.A camera barcode scanner is created dynamically as Windows pairs the camera(s) attached to your computer with a software decoder. Cada par de descodificador de cámara es un escáner de código de barras totalmente funcional.Each camera - decoder pair is a fully functional barcode scanner.

Para cada escáner de códigos de barras de la recopilación de dispositivos resultante, puede diferenciar entre escáneres de código de barras de cámara y escáneres de códigos de barras físicos mediante la comprobación de la propiedad 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 valor de VideoDeviceID que no sea NULL indica que el objeto de escáner de código de barras de la colección de dispositivos es un escáner de código de barras de cámara.A non-NULL VideoDeviceID indicates that the barcode scanner object from your device collection is a camera barcode scanner. Si tiene más de un escáner de códigos de barras de la cámara, es posible que desee crear una colección independiente que excluya los escáneres de códigos de barras físicos.If you have more than one camera barcode scanner you might want to build a separate collection which excludes physical barcode scanners.

Los escáneres de códigos de barras de la cámara que usan el descodificador que se distribuye con Windows se identifican como:Camera barcode scanners using the decoder that ships with Windows are identified as:

Microsoft BarcodeScanner (nombre de la cámara aquí)Microsoft BarcodeScanner (name of your camera here)

Si tiene más de una cámara y están integradas en el chasis del equipo, el nombre puede diferenciar entre las cámaras frontal y trasera .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

En el futuro, podrían liberarse descodificadores de software adicionales con diferentes esquemas de nomenclatura.In the future, additional software decoders with different naming schemes might be released.

Cuando se inicia la DeviceWatcher (paso 4), se enumera a través de cada dispositivo conectado.When the DeviceWatcher starts (step 4), it enumerates through each connected device. Aquí se agregan los escáneres disponibles a una colección de escáner de código de barras y se enlaza la colección a un cuadro de lista.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;
        }
    });
}

Cuando el SelectedIndex del cuadro de lista cambia (el primer elemento está seleccionado de forma predeterminada en el fragmento de código anterior), se consulta la información del 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);
}

Paso 6: reclamar el escáner de códigos de barras de la cámaraStep 6: Claim the camera barcode scanner

Use BarcodeScanner. ClaimScannerAsync para obtener el uso exclusivo del escáner de códigos de barras de la cámara.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);
    }
}

Paso 7: versión preliminar proporcionada por el sistemaStep 7: System provided preview

Se necesita una vista previa de la cámara para que el usuario pueda dirigirse correctamente a la cámara en códigos de barras.A camera preview is needed for the user to successfully aim the camera at barcodes. Windows proporciona una sencilla vista previa de cámara que inicia un cuadro de diálogo para el control básico del escáner de códigos de barras de la cámara.Windows provides a simple camera preview that launches a dialog for basic control of the camera barcode scanner. Simplemente llame a ClaimedBarcodeScanner. ShowVideoPreview para abrir el cuadro de diálogo y ClaimedBarcodeScanner. HideVideoPreview para cerrarlo cuando termine.Simply call ClaimedBarcodeScanner.ShowVideoPreview to open the dialog and ClaimedBarcodeScanner.HideVideoPreview to close it when finished.

Sugerencia

Consulte vista previa de hospedaje para hospedar la vista previa del escáner de códigos de barras de la cámara en la aplicación.See Hosting Preview to host the preview for camera barcode scanner in your application.

Paso 8: iniciar el examenStep 8: Initiate scan

Puede iniciar el proceso de digitalización mediante una llamada a StartSoftwareTriggerAsync.You can initiate the scan process by calling StartSoftwareTriggerAsync.

Dependiendo del valor de IsDisabledOnDataReceived , es posible que el escáner examine solo un código de barras y, después, detenga o digitalice continuamente hasta que llame a StopSoftwareTriggerAsync.Depending on the value of IsDisabledOnDataReceived the scanner might scan only one barcode then stop or scan continuously until you call StopSoftwareTriggerAsync.

Establezca el valor deseado de IsDisabledOnDataReceived para controlar el comportamiento del analizador cuando se descodifica un código de barras.Set the desired value of IsDisabledOnDataReceived to control the scanner behavior when a barcode is decoded.

ValueValue DescripciónDescription
TrueTrue Examinar solo un código de barras y detenerScan only one barcode then stop
FalsoFalse Examinar los códigos de barras continuamente sin detenerseContinuously scan barcodes without stopping

Vea tambiénSee also

EjemplosSamples