Por onde começamos?
Adicione um pacote para trabalhar com equipes de EPS / POS no projeto Nuget. Para isso, abra o Package Manager Console e adicione Zebra.Printer.SDK com o comando
Install-Package Zebra.Printer.SDK
De fato, não importa qual modelo de impressora você está usando e quem é o fabricante. Você precisa ter certeza de que a impressora suporta comandos EPS / POS (a maioria deles). Nesse caso, a biblioteca poderá trabalhar com ela sem problemas.
Todas as etapas adicionais são descritas com a suposição de que você entrou nas configurações do dispositivo Android e se conectou à impressora.
Primeiro, adicione permissões ao arquivo 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>
Obtenha o adaptador para trabalhar com Bluetooth:
var bluetoothAdapter = BluetoothAdapter.DefaultAdapter;
Encontraremos impressoras entre todos os dispositivos conectados e tomaremos o primeiro:
var printers = bluetoothAdapter.BondedDevices.Where(c => c.BluetoothClass.MajorDeviceClass == MajorDeviceClass.Imaging && (int)c.BluetoothClass.DeviceClass == PrinterBluetoothMinorDeviceClassCode && c.BondState == Bond.Bonded); var printer = printers.First();
Em um aplicativo real, você deve selecionar uma impressora pelo nome, por exemplo, exibir uma caixa de diálogo para o usuário onde ele pode selecionar uma impressora
Por algum motivo, o código da classe menor de dispositivo que corresponde às impressoras está ausente na enumeração Xumarin Android, então apenas a defini como uma constante:
private const int PrinterBluetoothMinorDeviceClassCode = 1664;
Em seguida, precisamos criar uma associação:
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; } }
Estamos tentando conectar de duas maneiras diferentes, a primeira normal e a segunda multicanal. A impressora pode funcionar em um deles, então tentamos os dois em sucessão.
Depois de conseguir criar uma conexão, você precisará abrir uma conexão, enviar dados para a impressora e fechar a conexão:
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ão esqueça que a operação de abertura de uma conexão é longa, portanto deve ser realizada em um encadeamento separado. A execução no thread principal da interface do usuário não é recomendada.
Após o comando Write, uma lista dos caracteres que você enviou deve ser exibida.