Добавим в проект Nuget пакет для работы с EPS/POS командами. Для этого откройте Package Manager Console и добавьте Zebra.Printer.SDK командой
Install-Package Zebra.Printer.SDK
По сути, не имеет значения какую модель принтера вы используете и кто производитель. Вам нужно убедиться в том, что принтер поддерживает работу с EPS/POS командами (их большинство). В этом случае библиотека сможет работать с ним без проблем.
Все дальнейшие действия описаны с предположением того, что вы зашли в настройки Android устройства и подключились к принтеру.
В первую очередь добавим разрешения в файл 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>
Получим адаптер для работы с Bluetooth:
var bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
Найдем среди всех подключенных устройств принтеры и возьмем первый из них:
var printers = bluetoothAdapter.BondedDevices.Where(c => c.BluetoothClass.MajorDeviceClass == MajorDeviceClass.Imaging && (int)c.BluetoothClass.DeviceClass == PrinterBluetoothMinorDeviceClassCode && c.BondState == Bond.Bonded); var printer = printers.First();
В реальном приложении следует сделать выбор принтера по имени, например вывести диалог для пользователя, где он сможет выбрать принтер
Код минорного класса устройств, который соответствует принтерам, почему-то отсутствует в enum Xamarin Android поэтому я просто задаю его константой:
private const int PrinterBluetoothMinorDeviceClassCode = 1664;
Дальше нам нужно создать соедининение:
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; } }
Мы пытаемся подключиться двумя разными путями, первый обычный, второй — мультиканальный. Принтер может работать в одном из них, поэтому последовательно пробуем оба.
После того как вам удастся создать подключение, нужно будет открыть соединение, отправить данные на принтер, и закрыть подключение:
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(); } }
Не забудьте, что операция открытия соединения длительная, поэтому ее следует выполнять в отдельном потоке. Выполнять ее в главном потоке UI не рекомендуется.
После команды Write должна пойти распечатка отправленных вами символов.
ссылка на оригинал статьи https://habr.com/ru/post/463691/
Добавить комментарий