Как просто подключить и начать печатать через портативный Bluetooth принтер EPS/POS в приложении Xamarin Android

от автора

С чего же мы начнём?

Добавим в проект 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *