Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
- In Microsoft Visual Studio, in Esplora Soluzioni, apri la finestra di progettazione per il manifesto dell'applicazione facendo doppio clic sull'elemento package.appxmanifest.
- Selezionare la scheda Funzionalità .
- 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
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 |