Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Point-of-Service, Point-of-Sale oder Point-of-Service-Geräte sind Computerperipheriegeräte, die genutzt werden, um Einzelhandelsgeschäfte zu vereinfachen. Beispiele für Point of Service-Geräte sind elektronische Kassen, Barcodescanner, Magnetstreifenleser und Belegdrucker.
Hier lernen Sie die Grundlagen der Interoperabilität mit Point of Service-Geräten mithilfe der Windows-Runtime-Point-of-Service-APIs kennen. Wir behandeln die Geräteaufzählung, das Überprüfen der Gerätefunktionen, das Anfordern von Geräten und die Gerätefreigabe. Wir verwenden ein Strichcodescannergerät als Beispiel, aber fast alle hier aufgeführten Anleitungen gelten für alle UWP-kompatiblen Point of Service-Geräte. (Eine Liste der unterstützten Geräte finden Sie unter Point of Service-Geräteunterstützung).
Suchen und Herstellen einer Verbindung mit Point of Service-Peripheriegeräten
Bevor ein Point of Service-Gerät von einer App verwendet werden kann, muss es mit dem PC gekoppelt werden, auf dem die App ausgeführt wird. Es gibt mehrere Möglichkeiten, eine Verbindung mit Point of Service-Geräten herzustellen, entweder programmgesteuert oder über die Einstellungs-App.
Herstellen einer Verbindung mit Geräten mithilfe der Einstellungs-App
Wenn Sie ein Point of Service-Gerät wie einen Strichcodescanner an einen PC anschließen, wird es wie jedes andere Gerät angezeigt. Sie finden es im Abschnitt "Geräte > Bluetooth & andere Geräte " der Einstellungs-App. Dort können Sie ein Point of Service-Gerät koppeln, indem Sie Bluetooth oder ein anderes Geräthinzufügen auswählen.
Einige Point of Service-Geräte werden in der Einstellungs-App möglicherweise erst angezeigt, wenn sie programmgesteuert mithilfe der Point of Service-APIs aufgezählt werden.
Abrufen eines einzelnen Point of Service-Geräts mit GetDefaultAsync
In einem einfachen Anwendungsfall haben Sie möglicherweise nur ein Point of Service-Peripheriegerät an den PC angeschlossen, auf dem die App ausgeführt wird, und möchten sie so schnell wie möglich einrichten. Rufen Sie dazu das "Standard"-Gerät mit der GetDefaultAsync--Methode ab, wie hier gezeigt.
using Windows.Devices.PointOfService;
BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();
Wenn das Standardgerät gefunden wird, kann das abgerufene Geräteobjekt beansprucht werden. Das „Anfordern“ eines Geräts gewährt einer Anwendung exklusiven Zugriff darauf. Dadurch werden Konflikte durch Befehle aus mehreren Prozessen verhindert.
Hinweis
Wenn mehrere Point of Service-Geräte mit dem PC verbunden sind, gibt GetDefaultAsync das erste gefundene Gerät zurück. Verwenden Sie aus diesem Grund FindAllAsync-, es sei denn, Sie sind sicher, dass nur ein Point of Service-Gerät für die Anwendung sichtbar ist.
Aufzählen einer Sammlung von Geräten mit FindAllAsync
Wenn Sie mit mehreren Geräten verbunden sind, müssen Sie die Sammlung der PointOfService-Geräteobjekte aufzählen, um das Objekt zu finden, das Sie beanspruchen möchten. Der folgende Code erstellt beispielsweise eine Auflistung aller derzeit verbundenen Strichcodescanner und durchsucht dann die Auflistung nach einem Scanner mit einem bestimmten Namen.
using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;
string selector = BarcodeScanner.GetDeviceSelector();
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
foreach (DeviceInformation devInfo in deviceCollection)
{
Debug.WriteLine("{0} {1}", devInfo.Name, devInfo.Id);
if (devInfo.Name.Contains("1200G"))
{
Debug.WriteLine(" Found one");
}
}
Festlegung des Auswahlbereichs der Geräte
Wenn Sie eine Verbindung mit einem Gerät herstellen, können Sie die Suche auf eine Teilmenge von Point of Service-Peripheriegeräten beschränken, auf die Ihre App Zugriff hat. Mit der GetDeviceSelector-Methode können Sie die Auswahl auf das Abrufen von Geräten beschränken, die nur über eine bestimmte Methode (Bluetooth, USB usw.) verbunden sind. Sie können eine Auswahl erstellen, die über Bluetooth, IP-, lokaleoder Alle Verbindungstypennach Geräten sucht. Dies kann nützlich sein, da die Ermittlung drahtloser Geräte im Vergleich zur lokalen (kabelgebundenen) Ermittlung sehr lange dauert. Sie können eine bestimmte Wartezeit für die lokale Geräteverbindung sicherstellen, indem Sie FindAllAsync- auf Lokalen Verbindungstypen beschränken. Dieser Code ruft beispielsweise alle Barcode-Scanner ab, die über eine lokale Verbindung zugänglich sind.
string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
Reagieren auf Geräteverbindungsänderungen mit DeviceWatcher
Während Ihre App läuft, werden manchmal Geräte getrennt oder aktualisiert, oder neue Geräte müssen hinzugefügt werden. Sie können die DeviceWatcher-Klasse verwenden, um auf gerätebezogene Ereignisse zuzugreifen, damit Ihre App entsprechend reagieren kann. Hier ist ein Beispiel zur Verwendung des DeviceWatchersmit Methodenstubs, die aufgerufen werden sollen, falls ein Gerät hinzugefügt, entfernt oder aktualisiert wird.
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
}
Überprüfen der Funktionen eines Point of Service-Geräts
Auch innerhalb einer Geräteklasse, z. B. Barcodescanner, können die Attribute jedes Geräts zwischen Modellen erheblich variieren. Wenn Ihre App ein bestimmtes Geräteattribute erfordert, müssen Sie möglicherweise jedes verbundene Geräteobjekt überprüfen, um festzustellen, ob das Attribut unterstützt wird. Vielleicht erfordert Ihr Unternehmen beispielsweise, dass Etiketten mit einem bestimmten Barcodedruckmuster erstellt werden. Hier erfahren Sie, wie Sie überprüfen können, ob ein verbundener Strichcodescanner eine Symbologie unterstützt.
Hinweis
Eine Symbologie ist die Sprachzuordnung, die ein Barcode zum Codieren von Nachrichten verwendet.
try
{
BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(deviceId);
if (await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32))
{
Debug.WriteLine("Has symbology");
}
}
catch (Exception ex)
{
Debug.WriteLine("FromIdAsync() - " - ex.Message);
}
Verwenden der Device.Capabilities-Klasse
Die Device.Capabilities-Klasse ist ein Attribut aller Point of Service-Geräteklassen und kann verwendet werden, um allgemeine Informationen zu jedem Gerät abzurufen. In diesem Beispiel wird ermittelt, ob ein Gerät Statistiken unterstützt und, falls ja, Statistiken für alle unterstützten Typen abgerufen.
try
{
if (barcodeScanner.Capabilities.IsStatisticsReportingSupported)
{
Debug.WriteLine("Statistics reporting is supported");
string[] statTypes = new string[] {""};
IBuffer ibuffer = await barcodeScanner.RetrieveStatisticsAsync(statTypes);
}
}
catch (Exception ex)
{
Debug.WriteLine("EX: RetrieveStatisticsAsync() - " - ex.Message);
}
Registrieren eines Point of Service-Geräts
Bevor Sie ein Point of Service-Gerät für die aktive Eingabe oder Ausgabe verwenden können, müssen Sie es beanspruchen und der Anwendung exklusiven Zugriff auf viele seiner Funktionen gewähren. Dieser Code zeigt, wie Sie ein Strichcodescannergerät anfordern, nachdem Sie das Gerät mithilfe einer der oben beschriebenen Methoden gefunden haben.
try
{
claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();
}
catch (Exception ex)
{
Debug.WriteLine("EX: ClaimScannerAsync() - " - ex.Message);
}
Beibehalten des Geräts
Wenn Sie ein Point of Service-Gerät über ein Netzwerk oder eine Bluetooth-Verbindung verwenden, können Sie das Gerät für andere Apps im Netzwerk freigeben. (Weitere Informationen hierzu finden Sie unter Gerätefreigabe.) In anderen Fällen kann es sein, dass Sie das Gerät zur längeren Verwendung behalten möchten. In diesem Beispiel wird gezeigt, wie ein beanspruchter Strichcodescanner beibehalten wird, nachdem eine andere App angefordert hat, dass das Gerät freigegeben wird.
claimedBarcodeScanner.ReleaseDeviceRequested += claimedBarcodeScanner_ReleaseDeviceRequested;
void claimedBarcodeScanner_ReleaseDeviceRequested(object sender, ClaimedBarcodeScanner e)
{
e.RetainDevice(); // Retain exclusive access to the device
}
Eingabe und Ausgabe
Nachdem Sie ein Gerät beansprucht haben, sind Sie fast bereit, es zu verwenden. Um Eingaben vom Gerät zu erhalten, müssen Sie einen Delegaten einrichten und aktivieren, der die Daten empfängt. Im folgenden Beispiel beanspruchen wir ein Strichcodescannergerät, legen dessen Dekodierungseigenschaft fest und rufen dann EnableAsync auf, um die dekodierten Eingaben des Geräts zu aktivieren. Dieser Prozess variiert je nach Geräteklassen, deshalb finden Sie eine Anleitung zum Einrichten eines Delegaten für Geräte ohne Barcode in den relevanten UWP-App-Beispielen .
try
{
claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();
if (claimedBarcodeScanner != null)
{
claimedBarcodeScanner.DataReceived += claimedBarcodeScanner_DataReceived;
claimedBarcodeScanner.IsDecodeDataEnabled = true;
await claimedBarcodeScanner.EnableAsync();
}
}
catch (Exception ex)
{
Debug.WriteLine("EX: ClaimScannerAsync() - " - ex.Message);
}
void claimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
string symbologyName = BarcodeSymbologies.GetName(args.Report.ScanDataType);
var scanDataLabelReader = DataReader.FromBuffer(args.Report.ScanDataLabel);
string barcode = scanDataLabelReader.ReadString(args.Report.ScanDataLabel.Length);
}
Teilen eines Geräts zwischen Apps
Point of Service-Geräte werden häufig in Fällen verwendet, in denen mehrere Apps in einem kurzen Zeitraum darauf zugreifen müssen. Ein Gerät kann geteilt werden, wenn es lokal über mehrere Apps verbunden ist, sei es über USB oder eine andere kabelgebundene Verbindung, oder durch ein Bluetooth- oder IP-Netzwerk. Je nach den Anforderungen jeder App muss möglicherweise ein Prozess seinen Anspruch auf dem Gerät verwerfen. Dieser Code entsorgt unser beanspruchtes Strichcodescannergerät, sodass andere Apps es beanspruchen und verwenden können.
if (claimedBarcodeScanner != null)
{
claimedBarcodeScanner.Dispose();
claimedBarcodeScanner = null;
}
Hinweis
Sowohl die beanspruchten als auch die unbeanspruchten Point-of-Service-Geräteklassen implementieren die IClosable-Schnittstelle. Wenn ein Gerät über ein Netzwerk oder Bluetooth mit einer App verbunden ist, müssen sowohl die beanspruchten als auch die nicht beanspruchten Objekte verworfen werden, bevor eine andere App eine Verbindung herstellen kann.