So stellen Sie eine einfache Verbindung her und starten den Druckvorgang über einen tragbaren Bluetooth EPS / POS-Drucker in der Xamarin Android App

Wo fangen wir an?

Fügen Sie im Nuget-Projekt ein Paket für die Arbeit mit EPS / POS-Teams hinzu. Öffnen Sie dazu die Package Manager-Konsole und fügen Sie mit dem Befehl Zebra.Printer.SDK hinzu

Install-Package Zebra.Printer.SDK 

Tatsächlich spielt es keine Rolle, welches Druckermodell Sie verwenden und wer der Hersteller ist. Sie müssen sicherstellen, dass der Drucker EPS / POS-Befehle unterstützt (die meisten davon). In diesem Fall kann die Bibliothek problemlos damit arbeiten.

Alle weiteren Schritte werden unter der Annahme beschrieben, dass Sie die Einstellungen des Android-Geräts aufgerufen und eine Verbindung zum Drucker hergestellt haben.

Fügen Sie zunächst der Datei AndroidManifest.xml Berechtigungen hinzu:

 <manifest ....> ... <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> ... </manifest> 

Holen Sie sich den Adapter für die Arbeit mit Bluetooth:

 var bluetoothAdapter = BluetoothAdapter.DefaultAdapter; 

Wir werden Drucker unter allen angeschlossenen Geräten finden und den ersten nehmen:

 var printers = bluetoothAdapter.BondedDevices.Where(c => c.BluetoothClass.MajorDeviceClass == MajorDeviceClass.Imaging && (int)c.BluetoothClass.DeviceClass == PrinterBluetoothMinorDeviceClassCode && c.BondState == Bond.Bonded); var printer = printers.First(); 

In einer realen Anwendung sollten Sie einen Drucker anhand seines Namens auswählen. Zeigen Sie beispielsweise ein Dialogfeld für den Benutzer an, in dem er einen Drucker auswählen kann

Der Code für die kleinere Geräteklasse, der Druckern entspricht, fehlt aus irgendeinem Grund in der Xumarin Android-Enumeration, daher habe ich ihn einfach als Konstante festgelegt:

 private const int PrinterBluetoothMinorDeviceClassCode = 1664; 

Als nächstes müssen wir einen Join erstellen:

 Connection connection; try { var simpleConnectionString = $"BT:{printer.Address}"; connection = ConnectionBuilder.Build(simpleConnectionString); } catch (Exception exception) { try { var multiChannelConnectionString = $"BT_MULTI:{printer.Address}"; connection = ConnectionBuilder.Build(multiChannelConnectionString); } catch (Exception multichannelException) { Console.WriteLine(multichannelException); throw; } } 

Wir versuchen auf zwei verschiedene Arten eine Verbindung herzustellen, die erste normale, die zweite mehrkanalige. Der Drucker kann in einem von ihnen arbeiten, daher versuchen wir beide nacheinander.

Nachdem Sie eine Verbindung hergestellt haben, müssen Sie eine Verbindung öffnen, Daten an den Drucker senden und die Verbindung schließen:

 try { var testString = "This a test text for printer."; var stringBuilder = new StringBuilder(); stringBuilder.Append(testString); stringBuilder.Append("\n"); connection.Open(); connection.Write(Encoding.UTF8.GetBytes(stringBuilder.ToString())); } catch (Exception exception) { Console.WriteLine(exception); throw; } finally { if (connection.Connected) { connection.Close(); } } 

Vergessen Sie nicht, dass das Öffnen einer Verbindung lang ist. Daher sollte es in einem separaten Thread ausgeführt werden. Es wird nicht empfohlen, es im Haupt-UI-Thread auszuführen.

Nach dem Befehl Schreiben sollte eine Liste der von Ihnen gesendeten Zeichen angezeigt werden.

Source: https://habr.com/ru/post/de463691/


All Articles