Enumeración de dispositivos de punto de servicio
Este tema muestra cómo definir un selector de dispositivos que se usa para consultar los dispositivos disponibles en el sistema y usar este selector para enumerar los dispositivos de Punto de Servicio mediante uno de los siguientes métodos:
Método 1: Usar un selector de dispositivos
Mostrar una UI de selección de dispositivos y hacer que el usuario elija un dispositivo conectado. Este método se encarga de actualizar la lista cuando se conectan y eliminan dispositivos, y es más sencillo y seguro que otros métodos.
Método 2: Obtener el primer dispositivo disponible
Use GetDefaultAsync para acceder al primer dispositivo disponible en una clase de dispositivo de punto de servicio específica.
Método 3: Instantánea de dispositivos
Enumera una instantánea de los dispositivos de Punto de Servicio presentes en el sistema en un momento dado. Esto es muy útil cuando se quiere crear una UI propia o se necesita enumerar dispositivos sin mostrar una UI al usuario. FindAllAsync retendrá los resultados hasta que se complete toda la enumeración.
Método 4: Enumerar y ver
DeviceWatcher es un modelo de enumeración más potente y flexible que permite enumerar los dispositivos que están presentes en ese momento y recibir notificaciones cuando se añaden o eliminan dispositivos del sistema. Esto resulta útil cuando se desea mantener una lista actual de dispositivos en segundo plano para mostrarla en la UI en lugar de esperar a que se produzca una instantánea.
Definir un selector de dispositivos
Un selector de dispositivos permite limitar los dispositivos que se buscan al enumerarlos. Esto le permite obtener solo resultados relevantes y reducir el tiempo que se tarda en enumerar los dispositivos deseados.
Puede usar el método GetDeviceSelector para el tipo de dispositivo que busca y obtener el selector de dispositivo para ese tipo. Por ejemplo, el uso de PosPrinter.GetDeviceSelector le proporcionará un selector para enumerar todas las PosPrinters conectadas al sistema, incluidas las impresoras POS USB, de red y Bluetooth.
using Windows.Devices.PointOfService;
string selector = POSPrinter.GetDeviceSelector();
Los métodos GetDeviceSelector para los distintos tipos de dispositivo son:
- BarcodeScanner.GetDeviceSelector
- CashDrawer.GetDeviceSelector
- LineDisplay.GetDeviceSelector
- MagneticStripeReader.GetDeviceSelector
- PosPrinter.GetDeviceSelector
Con un método GetDeviceSelector que toma un valor PosConnectionTypes como parámetro, puede restringir su selector para enumerar dispositivos POS locales, de red o conectados por Bluetooth, lo que reduce el tiempo que tarda en completarse la consulta. El siguiente ejemplo muestra el uso de este método para definir un selector que admita solo impresoras PDV conectadas localmente.
using Windows.Devices.PointOfService;
string selector = POSPrinter.GetDeviceSelector(PosConnectionTypes.Local);
Sugerencia
Consulte Crear un selector de dispositivos para crear cadenas de selector más avanzadas.
Método 1:Usar un selector de dispositivos
La clase DevicePicker le permite mostrar un control flotante de selección que contiene una lista de dispositivos para que el usuario pueda elegir. Puede usar la propiedad Filtro para elegir qué tipos de dispositivos mostrar en el selector. Esta propiedad es del tipo DevicePickerFilter. Puede agregar tipos de dispositivos al filtro mediante las propiedades SupportedDeviceClasses o SupportedDeviceSelectors.
Cuando esté listo para mostrar el selector de dispositivos, puede llamar al método PickSingleDeviceAsync, que mostrará la UI del selector y devolverá el dispositivo seleccionado. Tendrá que especificar un Rect que determinará dónde aparecerá e control flotante. Este método devolverá un objeto DeviceInformation, por lo que para usarlo con las API de punto de servicio, deberá usar el método FromIdAsync para la clase de dispositivo concreta que desee. Se pasa la propiedad DeviceInformation.Id como parámetro deviceId del método y se obtiene una instancia de la clase de dispositivo como valor devuelto.
El siguiente fragmento de código crea un DevicePicker, le agrega un filtro de escáner de código de barras, hace que el usuario elija un dispositivo y luego crea un objeto BarcodeScanner basado en el ID del 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;
}
Método 2:Obtener el primer dispositivo disponible
La forma más sencilla de obtener un dispositivo de punto de servicio es usar GetDefaultAsync para obtener el primer dispositivo disponible dentro de una clase de dispositivo de punto de servicio.
El ejemplo siguiente ilustra el uso de GetDefaultAsync para BarcodeScanner. El patrón de codificación es similar para todas las clases de dispositivos de punto de servicio.
using Windows.Devices.PointOfService;
BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();
Precaución
GetDefaultAsync debe usarse con cuidado, ya que puede devolver un dispositivo diferente de una sesión a otra. Muchos eventos pueden influir en esta enumeración y dar como resultado un primer dispositivo disponible diferente, entre los que se incluyen:
- Cambio en las cámaras conectadas al ordenador
- Cambio en los dispositivos de punto de servicio conectados a su ordenador
- Cambio en los dispositivos de punto de servicio conectados a la red disponibles en su red
- Cambio en los dispositivos de punto de servicio Bluetooth dentro del alcance de su ordenador
- Cambios en la configuración del Punto de Servicio
- Instalación de controladores u objetos de servicio OPDV
- Instalación de extensiones del Punto de Servicio
- Actualización al sistema operativo Windows
Método 3: Instantánea de dispositivos
En algunos casos, es posible que desee crear su propia UI o que necesite enumerar los dispositivos sin mostrar una UI al usuario. En estas situaciones, puede enumerar una instantánea de los dispositivos que están actualmente conectados o emparejados con el sistema mediante DeviceInformation.FindAllAsync. Este método retendrá cualquier resultado hasta que se complete toda la enumeración.
Sugerencia
Se recomienda usar el método GetDeviceSelector con el parámetro PosConnectionTypes al usar FindAllAsync para limitar la consulta al tipo de conexión deseado. Las conexiones de red y Bluetooth pueden retrasar los resultados, ya que sus enumeraciones deben completarse antes de que se devuelvan los resultados de FindAllAsync.
Precaución
FindAllAsync devuelve una matriz de dispositivos. El orden de esta matriz puede cambiar de una sesión a otra, por lo que no se recomienda confiar en un orden específico mediante el uso de un índice codificado en la matriz. Use las propiedades DeviceInformation para filtrar sus resultados o proporcionar una interfaz de usuario para que el usuario elija.
En este ejemplo se usa el selector definido anteriormente para tomar una instantánea de los dispositivos usando FindAllAsync, luego se enumeran cada uno de los elementos devueltos por la colección y se escribe el nombre y el ID del dispositivo en la salida de depuración.
using Windows.Devices.Enumeration;
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
foreach (DeviceInformation devInfo in deviceCollection)
{
Debug.WriteLine("{0} {1}", devInfo.Name, devInfo.Id);
}
Sugerencia
Cuando se trabaja con las API de Windows.Devices.Enumeration, con frecuencia será necesario usar objetos DeviceInformation para obtener información sobre un dispositivo específico. Por ejemplo, la propiedad DeviceInformation.ID se puede usar para recuperar y reutilizar el mismo dispositivo si está disponible en una sesión futura y la propiedad DeviceInformation.Name se puede usar con fines de visualización en su aplicación. Consulte la página de referencia de DeviceInformation para obtener información sobre otras propiedades disponibles.
Método 4:Enumerar y observar
Un método más potente y flexible de enumerar dispositivos es crear un monitor de dispositivos. Un monitor de dispositivos enumera los dispositivos de forma dinámica, de modo que la aplicación recibe notificaciones si se añaden, eliminan o cambian dispositivos una vez finalizada la enumeración inicial. Un monitor de dispositivos le permitirá detectar cuando un dispositivo conectado a la red entra en línea, un dispositivo Bluetooth está en el rango, así como si un dispositivo conectado localmente se desconecta para que pueda tomar la acción apropiada dentro de su aplicación.
En este ejemplo se usa el selector definido anteriormente para crear un monitor de dispositivos y se definen controladores de eventos para las notificaciones de agregado, eliminación y actualización. Deberá completar los detalles de las acciones que desea realizar en cada notificación.
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
}
Sugerencia
Consulte Enumerar y observar dispositivos para más detalles sobre el uso de un monitor de dispositivos.
Consulte también
- Introducción al punto de servicio
- Clase DeviceInformation
- Clase PosPrinter
- Enumeración PosConnectionTypes
- Clase BarcodeScanner
- Clase monitor de dispositivos
Soporte y comentarios
Encontrar respuestas a tus preguntas
¿Tienes alguna pregunta? Pregúntenos en nuestro foro de preguntas y respuestas Docs con la etiqueta UWP o en Stack Overflow con la etiqueta pointofservice.
Ayúdenos a localizar sus preguntas:
- Agregue la etiqueta pointofservice a la pregunta en Stack Overflow.
- Incluya el término "UWP" en su mensaje en el foro de preguntas y respuestas.