© S&S Media
Einsatz von QR-Codes auf der Universal Windows Platform

Der Code ist das Ziel


Man kann über vieles im Handcomputerbereich vortrefflich streiten. Aber dass User nur höchst ungern lange Zeichensequenzen mit der Tastatur eingeben – darüber sind sich sogar Apple- und Android-Fanboys einig. Im Bereich des Marketings hat man hingegen seit jeher das Problem, wie man interessierte Betrachter von Anzeigen zu den feilgebotenen Produkten des Unternehmens führt. Die Lösung? QR-Codes! Wie man diese auf der Universal Windows Platform einsetzt, erklärt dieser Artikel.

Rollen wir die angeschnittene Marketingproblematik noch mal von vorne auf. Gibt man als Werber dem potenziellen Kunden die Startseite des Unternehmens an die Hand, fehlt der Kontext. Verlängert sich hingegen der URL, wird das Eingeben immer schwieriger, und die Wahrscheinlichkeit für Eingabefehler und damit verlorene Kunden nimmt zu. Das vom japanischen Unternehmen Denso-Wave im Jahr 1994 entwickelte Verfahren des QR-Codes ist in dieser Hinsicht geradezu ideal: Während traditionelle Barcodes (ebenfalls eine Entwicklung von Denso-Wave) nur wenige Zeichen speichern können, ist die Informationsdichte von QR-Codes im Großen und Ganzen unbegrenzt.

Die Geschichte der QR-Codes begann im Westen bei Nokia. Die Finnen begannen, ihre Kamerasmartphones konsequent mit QR-Code-Lesesoftware auszustatten. Im Laufe der Zeit zogen die anderen Hersteller nach, und heute dürfte es kaum mehr einen Benutzer geben, der beim Anblick eines solchen Codes nicht weiß, was er zu tun hat. Dass längst nicht alle Telefone einen Scanner mitbringen, steht auf einem anderen Blatt. Über die wirkliche Scanwilligkeit lässt sich ebenfalls vortrefflich streiten. Außer Diskussion steht allerdings, dass QR-Codes in vielen Fällen hilfreich sind. Grund genug, im Rahmen dieses Artikels zu demonstrieren, wie man die Codes auf der Universal Windows Platform einsetzt.

Willkommen am Point of Sale

Wer nach „Windows Universal Platform Barcode“ sucht, stolpert im ersten Schritt normalerweise über das unter https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BarcodeScanner bereitstehende Codebeispiel. Microsoft stattet die Universal Windows Platform seit einiger Zeit mit einem vollwertigen API für diverse Geräte aus, die man im Einzel- und Großhandel benötigt. Das ebenda bereitgestellte Programmbeispiel ist – schon aus didaktischen Gründen – interessant, weshalb wir es kurz betrachten wollen. Achten Sie dabei darauf, dass Sie das Archiv Master.zip immer als Ganzes extrahieren müssen: Aufgrund komplexer Dependencys zwischen den einzelnen Beispielen ist es nicht erlaubt, Beispiele einzeln zu extrahieren. Öffnen Sie im nächsten Schritt die Datei Windows-universal-samples-master\Samples\BarcodeScanner\cs\BarcodeScanner.sln in Visual Studio 2015.

Kamerabarcode?

In der Dokumentation zum hier besprochenen Codebeispiel finden sich Verweise auf ein unter dem URL https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/CameraBarcodeScanner bereitstehendes Beispiel, das dieses API im Zusammenhang mit der Kamera nutzt. Zum Zeitpunkt der Drucklegung dieses Hefts war das Beispiel allerdings nicht mehr verfügbar – Microsoft dürfte es ob zu vieler „Issues“ offline genommen haben.

Das verwendete Beispiel ist – Microsoft-üblich – vom XAML-Aufbau her vergleichsweise komplex. Das Hauptformular enthält dabei zwei als Szenario bezeichnete Unterformulare, die die eigentliche Interaktionsintelligenz für den Datenaustausch zwischen Barcodescanner und Hauptapplikation enthalten bzw. bereitstellen.

Ganz analog zum SDK des Kinect 2 gilt auch im Fall des Barcodescanner-APIs, dass Microsofts Software mehrere Scanner gleichzeitig unterstützt. Die Beschaffung einer Scannerinstanz erfolgt im Codebeispiel in der Methode CreateDefaultScannerObject, deren stark gekürzter Code wie in Listing 1 aussehen würde.

Listing 1

private async Task<bool> CreateDefaultScannerObject() { if (scanner == null) { DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(BarcodeScanner.GetDeviceSelector()); if (deviceCollection != null && deviceCollection.Count > 0) { scanner = await BarcodeScanner.FromIdAsync(deviceCollection[0].Id); . . .

Vor der eigentlichen Nutzung des Scannerobjekts muss dieses noch über einen als „Claim“ bezeichneten Prozess „erbeutet“ werden. Eine stark gekürzte Version des dazu notwendigen Codes würde sich folgendermaßen präsentieren:

private async Task<bool> ClaimScanner() { if (claimedScanner == null) { claimedScanner = await scanner.ClaimScannerAsync(); if (claimedScanner == null){

Im Fall des erfolgreichen Erfassens des Scanners müssen wir diesem Ereignis-Handler einschreiben, die beim Scannen eines Barcodes aufgerufen werden. Auch hier findet sich ein alter Bekannter: Der Aufruf einer En­able-Methode dürfte all jenen bekannt vorkommen, die schon einmal am Kinect programmiert haben:

claimedScanner.DataReceived += claimedScanner_DataReceived; claimedScanner.IsDecodeDataEnabled = true; await claimedScanner.EnableAsync();

Wenn der QR-Codescanner einen Code erfasst, so folgt ein Aufruf von DataReceived. Hierbei...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang