С чего же мы начнём?
Добавим в проект Nuget пакет для работы с EPS/POS командами. Для этого откройте Package Manager Console и добавьте Zebra.Printer.SDK командой
Все дальнейшие действия описаны с предположением того, что вы зашли в настройки Android устройства и подключились к принтеру.
В первую очередь добавим разрешения в файл AndroidManifest.xml:
Получим адаптер для работы с Bluetooth:
Найдем среди всех подключенных устройств принтеры и возьмем первый из них:
Код минорного класса устройств, который соответствует принтерам, почему-то отсутствует в enum Xamarin Android поэтому я просто задаю его константой:
Дальше нам нужно создать соедининение:
После того как вам удастся создать подключение, нужно будет открыть соединение, отправить данные на принтер, и закрыть подключение:
После команды Write должна пойти распечатка отправленных вами символов.
Добавим в проект 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 должна пойти распечатка отправленных вами символов.
Imbecile
Что такое EPS/POS? Не, не в этот раз.
Где именно, каким шрифтом и т.д. будет распечатан текст? Не, зачем вам это.
Фееричное использование StringBuilder для добавления символа новой строки? Вот оно!
Про using для IDisposable? Зачем, когда можно удвоить количество кода.
Итог: поздравляю, вы умеете подключать nuget пакет zebra.printer.sdk!
ukod Автор
Что такое EPS/POS действительно не в этот раз.
Распечатан будет на принтере который подключен.
StringBuilder использован для примера, там можно добавить сколько угодно строк либо заменить его на композер текста с форматированием. Вы перепутали заметку туториала со своей страницей код ревью.
Будет что-то конструктивное сказать — заходите еще раз.