Enumerazione dei dispositivi Point of Service
Il presente argomento illustra come definire un selettore di dispositivo usato per eseguire query sui dispositivi disponibili per il sistema e utilizzare questo selettore per enumerare i dispositivi Point of Service usando uno dei metodi seguenti:
Metodo 1: Usare una selezione dispositivi
Visualizzare un'interfaccia utente del selettore dispositivi e fare in modo che l'utente scelga un dispositivo connesso. Questo metodo gestisce l'aggiornamento dell'elenco quando i dispositivi vengono collegati e rimossi ed è più semplice e sicuro rispetto ad altri metodi.
Metodo 2: Ottenere il primo dispositivo disponibile
Usare GetDefaultAsync per accedere al primo dispositivo disponibile in una classe di dispositivo Point of Service specifica.
Metodo 3: Snapshot dei dispositivi
Enumerare uno snapshot dei dispositivi Point of Service presenti nel sistema in un determinato momento. Ciò è utile quando si desidera creare un'interfaccia utente personalizzata o enumerare i dispositivi senza visualizzare un'interfaccia utente per l'utente stesso. FindAllAsync conterrà i risultati fino al completamento dell'intera enumerazione.
Metodo 4: Enumerare e guardare
DeviceWatcher è un modello di enumerazione più potente e flessibile che consente di enumerare i dispositivi attualmente presenti e ricevere notifiche anche quando i dispositivi vengono aggiunti o rimossi dal sistema. Ciò è utile quando s'intende mantenere un elenco corrente di dispositivi in background per la visualizzazione nell'interfaccia utente anziché attendere che si verifichi uno snapshot.
Definisci un selettore di dispositivo
Un selettore di dispositivo consente di limitare i dispositivi cercati durante l'enumerazione dei dispositivi. In questo modo è possibile ottenere solo i risultati pertinenti e ridurre il tempo necessario per enumerare i dispositivi desiderati.
È possibile usare il metodo GetDeviceSelector per il tipo di dispositivo che si sta cercando e ottenere il selettore del dispositivo per quel tipo. Ad esempio, l'uso di PosPrinter.GetDeviceSelector fornirà un selettore per enumerare tutti i PosPrinters collegati al sistema, tra cui stampanti USB, rete e POS Bluetooth.
using Windows.Devices.PointOfService;
string selector = POSPrinter.GetDeviceSelector();
I metodi GetDeviceSelector per i diversi tipi di dispositivo sono:
- BarcodeScanner.GetDeviceSelector
- CashDrawer.GetDeviceSelector
- LineDisplay.GetDeviceSelector
- MagneticStripeReader.GetDeviceSelector
- PosPrinter.GetDeviceSelector
Usando un metodo GetDeviceSelector che accetta un valore PosConnectionTypes come parametro, è possibile limitare il selettore per enumerare i dispositivi POS locali, di rete o bluetooth, riducendo il tempo necessario per il completamento della query. L'esempio seguente mostra un uso di questo metodo per definire un selettore che supporta solo stampanti POS collegate localmente.
using Windows.Devices.PointOfService;
string selector = POSPrinter.GetDeviceSelector(PosConnectionTypes.Local);
Suggerimento
Vedere Crea un selettore di dispositivo per la creazione di stringhe del selettore più avanzate.
Metodo 1: usare un selettore di dispositivi
La classe DevicePicker consente di visualizzare un riquadro a comparsa di selezione che contiene un elenco di dispositivi per l'utente tra cui scegliere. È possibile usare la proprietà Filtro per scegliere i tipi di dispositivi da visualizzare nel selettore. In questo esempio la proprietà è di tipo DevicePickerFilter. È possibile aggiungere tipi di dispositivo al filtro usando la proprietà SupportedDeviceClasses o SupportedDeviceSelectors .
Quando sei pronto per visualizzare il selettore del dispositivo, è possibile richiamare il metodo PickSingleDeviceAsync , che mostrerà l'interfaccia utente del selettore e restituirà il dispositivo selezionato. Sarà necessario specificare un Rect che determinerà il punto in cui verrà visualizzato il riquadro a comparsa. Questo metodo restituirà un oggetto DeviceInformation , quindi per usarlo con le API Point of Service, occorrerà usare il metodo FromIdAsync per la specifica classe di dispositivo desiderata. Passare la proprietà DeviceInformation.Id come parametro deviceId del metodo e ottenere un'istanza della classe dispositivo come valore restituito.
Il seguente frammento di codice crea un DevicePicker, aggiunge a quest'ultimo un filtro dello scanner di codice a barre, nel frattempo l'utente dovrà selezionare un dispositivo e quindi creare un oggetto BarcodeScanner in base all'ID dispositivo:
private async Task<BarcodeScanner> GetBarcodeScanner()
{
DevicePicker devicePicker = new DevicePicker();
devicePicker.Filter.SupportedDeviceSelectors.Add(BarcodeScanner.GetDeviceSelector());
Rect rect = new Rect();
DeviceInformation deviceInformation = await devicePicker.PickSingleDeviceAsync(rect);
BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(deviceInformation.Id);
return barcodeScanner;
}
Metodo 2: ottenere il primo dispositivo disponibile
Il modo più semplice per ottenere un dispositivo Point of Service consiste nell'usare GetDefaultAsync per ottenere il primo dispositivo disponibile all'interno di una classe di dispositivo Point of Service.
L'esempio seguente illustra l'uso di GetDefaultAsync per BarcodeScanner. Il modello di codifica è simile per tutte le classi di dispositivi Point of Service.
using Windows.Devices.PointOfService;
BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();
Attenzione
GetDefaultAsync deve essere usato con attenzione in quanto può restituire un dispositivo diverso da una sessione alla successiva. Molti eventi possono influire su questa enumerazione, ottenendo un primo dispositivo disponibile diverso, tra cui:
- Cambiare le fotocamere collegate al computer
- Modificare i dispositivi Point of Service collegati al computer
- Modifica dei dispositivi Point of Service collegati alla rete e disponibili nella propria rete
- Cambiare i dispositivi Bluetooth Point of Service nell'intervallo di tempo del computer
- Modifiche alla configurazione del Point of Service
- Installazione di driver o di oggetti point of service OPOS
- Installazione delle estensioni Point of Service
- Aggiornamento al sistema operativo Windows
Metodo 3: snapshot dei dispositivi
In alcuni scenari potrebbe essere necessario creare un'interfaccia utente personalizzata o enumerare i dispositivi senza visualizzare un'UI per l'utente. In queste situazioni, è possibile enumerare uno snapshot dei dispositivi attualmente connessi o associati al sistema usando DeviceInformation.FindAllAsync. Questo metodo conterrà tutti i risultati fino al completamento dell'intera enumerazione.
Suggerimento
È consigliabile usare il metodo GetDeviceSelector con il parametro PosConnectionTypes quando si usa FindAllAsync per limitare la query al tipo di connessione desiderato. Le connessioni di rete e Bluetooth possono ritardare i risultati in quanto le relative enumerazioni devono essere completate prima che vengano restituiti i risultati di FindAllAsync.
Attenzione
FindAllAsync restituisce un array dei dispositivi. L'ordine di questo array può cambiare da sessione a sessione, pertanto non è consigliabile basarsi su un ordine specifico usando un indice hardcoded nell'array. Usare le proprietà DeviceInformation per filtrare i risultati o fornire un'UI per l'utente da cui scegliere.
Questo esempio usa il selettore definito in precedenza per creare uno snapshot dei dispositivi usando FindAllAsync , quindi enumera tutti gli elementi restituiti dalla raccolta e scrive il nome e l'ID del dispositivo nell'output di debug.
using Windows.Devices.Enumeration;
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
foreach (DeviceInformation devInfo in deviceCollection)
{
Debug.WriteLine("{0} {1}", devInfo.Name, devInfo.Id);
}
Suggerimento
Quando si usano le API Windows.Devices.Enumeration , sarà spesso necessario usare oggetti DeviceInformation per ottenere informazioni su un dispositivo specifico. Ad esempio, la proprietà DeviceInformation.ID può essere usata per ripristinare e riutilizzare lo stesso dispositivo, se disponibile in una sessione futura e la proprietà DeviceInformation.Name può essere usata a scopo di visualizzazione nell'app. Per informazioni sulle proprietà aggiuntive disponibili, vedere la pagina di riferimento DeviceInformation .
Metodo 4: enumerare e guardare
Un metodo più potente e flessibile per enumerare i dispositivi consiste nel creare un DeviceWatcher. Un device watcher enumera i dispositivi in modo dinamico, in modo che l'applicazione riceva notifiche se i dispositivi vengono aggiunti, rimossi o modificati dopo il completamento dell'enumerazione iniziale. Un DeviceWatcher consente di rilevare quando un dispositivo connesso alla rete è online, o un dispositivo Bluetooth è compreso nell'intervallo, nonché se un dispositivo connesso in locale è scollegato in modo da poter eseguire l'azione appropriata all'interno dell'applicazione.
Questo esempio usa il selettore definito in precedenza per creare un DeviceWatcher e definisce i gestori eventi per le notifiche Aggiunto, Rimosso e Aggiornato. Sarà necessario immettere i dettagli delle azioni che si desidera eseguire su ogni notifica.
using Windows.Devices.Enumeration;
DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
deviceWatcher.Added += DeviceWatcher_Added;
deviceWatcher.Removed += DeviceWatcher_Removed;
deviceWatcher.Updated += DeviceWatcher_Updated;
void DeviceWatcher_Added(DeviceWatcher sender, DeviceInformation args)
{
// TODO: Add the DeviceInformation object to your collection
}
void DeviceWatcher_Removed(DeviceWatcher sender, DeviceInformationUpdate args)
{
// TODO: Remove the item in your collection associated with DeviceInformationUpdate
}
void DeviceWatcher_Updated(DeviceWatcher sender, DeviceInformationUpdate args)
{
// TODO: Update your collection with information from DeviceInformationUpdate
}
Suggerimento
Vedere Enumera e guarda i dispositivi per avere maggiori dettagli sull'uso di un DeviceWatcher.
Vedi anche
- Introduzione con un Point of service
- Classe DeviceInformation
- Classe PosPrinter
- Enum PosConnectionTypes
- Class BarcodeScanner
- Classe DeviceWatcher
Supporto, commenti e suggerimenti
Trova le risposte alle tue domande
Altre domande? Chiedi di noi sia sul forum Docs Q& utilizzando il tag UWP or on Stack Overflow con il tag pointofservice.
Aiutaci a individuare le tue domande:
- Aggiungere il tag pointofservice alla domanda in Stack Overflow.
- Includi il termine "UWP" nel tuo post sul forum Q&