Compartir a través de


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:

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

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.