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
- In Esplora soluzioni in Microsoft Visual Studio aprire la finestra di progettazione per il manifesto dell'applicazione facendo doppio clic sull'elemento package.appxmanifest.
- Fare clic sulla scheda Funzionalità.
- 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 |