Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se muestra cómo definir un selector de dispositivos que se usa para consultar los dispositivos disponibles para el sistema y usar este selector para enumerar dispositivos de punto de servicio mediante uno de los métodos siguientes:
Método 1:Usar un selector de dispositivos
Muestra una interfaz de usuario del selector de dispositivos y hace que el usuario elija un dispositivo conectado. Este método controla la actualización de la lista cuando los dispositivos están conectados y quitados, 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 punto de servicio específica.
Método 3:Instantánea de dispositivos
Enumerar una instantánea de los dispositivos de punto de servicio que están presentes en el sistema en un momento dado. Esto resulta útil cuando desea crear su propia interfaz de usuario o necesita enumerar dispositivos sin mostrar una interfaz de usuario al usuario. FindAllAsync conservará los resultados hasta que se complete toda la enumeración.
Método 4:Enumerar y observar
DeviceWatcher es un modelo de enumeración más eficaz y flexible que permite enumerar dispositivos que están presentes actualmente y también recibir notificaciones cuando los dispositivos se agregan o quitan del sistema. Esto resulta útil cuando desea mantener una lista actual de dispositivos en segundo plano para mostrarse en la interfaz de usuario en lugar de esperar a que se produzca una instantánea.
Definir un selector de dispositivos
Un selector de dispositivos le permite limitar los dispositivos que busca al enumerar los dispositivos. Esto le permite obtener solo los resultados pertinentes y reducir el tiempo necesario para enumerar los dispositivos deseados.
Puede usar el método GetDeviceSelector para el tipo de dispositivo que busca y obtener el selector de dispositivos para ese tipo. Por ejemplo, el uso de PosPrinter.GetDeviceSelector le proporcionará un selector para enumerar todos los PosPrinters conectados al sistema, incluidas las impresoras USB, network y Bluetooth POS.
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 el selector para enumerar dispositivos POS locales, de red o conectados a Bluetooth, lo que reduce el tiempo que tarda la consulta en completarse. En el ejemplo siguiente se muestra un uso de este método para definir un selector que solo admite impresoras POS conectadas localmente.
using Windows.Devices.PointOfService;
string selector = POSPrinter.GetDeviceSelector(PosConnectionTypes.Local);
Tip
Consulte Compilación de un selector de dispositivos para crear cadenas de selector más avanzadas.
Método 1: Usar un selector de dispositivos
La clase DevicePicker permite mostrar un cuadro flotante de selección que contiene una lista de dispositivos de la que el usuario puede elegir. Puede usar la propiedad Filter para elegir los tipos de dispositivos que se van a mostrar en el selector. Esta propiedad es de tipo DevicePickerFilter. Puede agregar tipos de dispositivo al filtro mediante la propiedad SupportedDeviceClasses o SupportedDeviceSelectors .
Cuando esté listo para mostrar el selector de dispositivos, puede llamar al método PickSingleDeviceAsync , que mostrará la interfaz de usuario 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 determinada que desee. La propiedad DeviceInformation.Id se pasa como el parámetro deviceId del método y se obtiene una instancia de la clase de dispositivo como valor devuelto.
El fragmento de código siguiente crea un DevicePicker, agrega un filtro de escáner de código de barras, tiene al usuario que elige un dispositivo y, a continuación, crea un objeto BarcodeScanner basado en el identificador de 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 manera 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 punto de servicio.
En el ejemplo siguiente se muestra el uso de GetDefaultAsync para BarcodeScanner. El patrón de codificación es similar para todas las clases de dispositivo punto de servicio.
using Windows.Devices.PointOfService;
BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();
Caution
GetDefaultAsync debe usarse con cuidado, ya que puede devolver un dispositivo diferente de una sesión a la siguiente. Muchos eventos pueden influir en esta enumeración, lo que da lugar a un primer dispositivo disponible diferente, entre los que se incluyen:
- Cambio en las cámaras conectadas a tu equipo
- Cambio en dispositivos de punto de servicio conectados al equipo
- Cambio en los dispositivos de punto de servicio conectados a la red disponibles en la 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 o objetos de servicio OPOS
- Instalación de extensiones de punto de servicio
- Actualizar al sistema operativo Windows
Método 3: Instantánea de dispositivos
En algunos escenarios, es posible que quiera crear su propia interfaz de usuario o necesite enumerar dispositivos sin mostrar una interfaz de usuario al usuario. En estas situaciones, podría enumerar una instantánea de los dispositivos que están conectados actualmente o emparejados con el sistema mediante DeviceInformation.FindAllAsync. Este método retendrá los resultados hasta que se complete toda la enumeración.
Tip
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 a medida que sus enumeraciones deben completarse antes de que se devuelvan los resultados de FindAllAsync .
Caution
FindAllAsync devuelve una matriz de dispositivos. El orden de esta matriz puede cambiar de sesión a sesión, por lo que no se recomienda confiar en un orden específico mediante el uso de un índice codificado de forma codificada en la matriz. Use las propiedades DeviceInformation para filtrar los 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 mediante FindAllAsync y, a continuación, enumera a través de cada uno de los elementos devueltos por la colección y escribe el nombre del dispositivo y el identificador 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);
}
Tip
Al trabajar con el Windows. Devices.Enumeration API, con frecuencia necesitará usar DeviceInformation objetos 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 la aplicación. Consulte la página de referencia DeviceInformation para obtener información sobre las propiedades adicionales disponibles.
Método 4: Enumerar y ver
Un método más eficaz y flexible de enumerar dispositivos es crear un DeviceWatcher. Un monitor de dispositivos enumera los dispositivos dinámicamente, de modo que la aplicación reciba notificaciones si los dispositivos se agregan, quitan o cambian una vez completada la enumeración inicial. Un DeviceWatcher te permitirá detectar cuándo un dispositivo conectado a la red se conecta, cuándo un dispositivo Bluetooth está dentro del alcance, así como si un dispositivo conectado localmente se desconecta, para que puedas realizar la acción adecuada en tu aplicación.
En este ejemplo se usa el selector definido anteriormente para crear un DeviceWatcher , así como definir controladores de eventos para las notificaciones agregadas, eliminadas y actualizadas . Deberá rellenar 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
}
Tip
Consulta Enumerar y supervisar dispositivos para obtener más información sobre cómo usar DeviceWatcher.