Como conectar e iniciar a impressão com facilidade por uma impressora Bluetooth EPS / POS portátil no aplicativo Xamarin Android

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.

Source: https://habr.com/ru/post/pt463691/


All Articles