Par où commencer?
Ajoutez un package pour travailler avec les équipes EPS / POS dans le projet Nuget. Pour ce faire, ouvrez la console du gestionnaire de packages et ajoutez Zebra.Printer.SDK avec la commande
Install-Package Zebra.Printer.SDK
En fait, peu importe le modèle d'imprimante que vous utilisez et le fabricant. Vous devez vous assurer que l'imprimante prend en charge les commandes EPS / POS (la plupart d'entre elles). Dans ce cas, la bibliothèque pourra travailler avec elle sans problème.
Toutes les autres étapes sont décrites avec l'hypothèse que vous êtes entré dans les paramètres de l'appareil Android et connecté à l'imprimante.
Tout d'abord, ajoutez des autorisations au fichier AndroidManifest.xml:
<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>
Obtenez l'adaptateur pour travailler avec Bluetooth:
var bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
Nous trouverons des imprimantes parmi tous les appareils connectés et prendrons la première:
var printers = bluetoothAdapter.BondedDevices.Where(c => c.BluetoothClass.MajorDeviceClass == MajorDeviceClass.Imaging && (int)c.BluetoothClass.DeviceClass == PrinterBluetoothMinorDeviceClassCode && c.BondState == Bond.Bonded); var printer = printers.First();
Dans une application réelle, vous devez sélectionner une imprimante par son nom, par exemple, afficher une boîte de dialogue pour l'utilisateur où il peut sélectionner une imprimante
Le code de la classe de périphérique secondaire qui correspond aux imprimantes manque pour une raison quelconque dans l'énumération Xumarin Android, je l'ai donc définie comme une constante:
private const int PrinterBluetoothMinorDeviceClassCode = 1664;
Ensuite, nous devons créer une jointure:
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; } }
Nous essayons de nous connecter de deux manières différentes, la première normale, la deuxième multi-canal. L'imprimante peut fonctionner dans l'un d'eux, nous essayons donc les deux successivement.
Après avoir réussi à créer une connexion, vous devrez ouvrir une connexion, envoyer des données à l'imprimante et fermer la connexion:
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(); } }
N'oubliez pas que l'opération d'ouverture d'une connexion est longue, elle doit donc être effectuée dans un thread séparé. Il n'est pas recommandé de l'exécuter dans le thread d'interface utilisateur principal.
Après la commande Write, une liste des caractères que vous avez envoyés devrait apparaître.