Ir para conteúdo
  • Cadastre-se

dev botao

Problema de desconexão ao usar impressora Bluetooth no Android com ACBrPosPrinter


Ver Solução Respondido por Antonio Rib,

Recommended Posts

Postado

Olá, pessoal!

Estou desenvolvendo uma aplicação Android usando Delphi com o componente ACBrPosPrinter para imprimir em uma impressora Bluetooth (MPT-III). Na primeira vez, a impressão funciona corretamente, mas, na segunda tentativa, recebo o seguinte erro:

First chance exception at $0000006D77A1FED8. Exception class EJNIException with message 'java.io.IOException: read failed, socket might closed or timeout, read ret: -1'. Process App.apk (21222)

Aqui está um resumo do que já tentei:

  1. Certifiquei-me de que o método ACBrPosPrinter1.Desativar é chamado após cada impressão.
  2. Adicionei tratamento de exceção e tentei reativar a conexão antes de imprimir novamente.
  3. Configurei o TimeOut para 30000 e ajustei o Baud para 9600.
  4. Verifiquei as permissões Bluetooth no AndroidManifest.xml e o uso de PedirPermissoesBlueTooth.

No entanto, o erro persiste na segunda impressão.

Perguntas:

  • Existe algum procedimento específico ou configuração adicional que eu possa aplicar para evitar essa desconexão na segunda tentativa?
  • Há alguma recomendação sobre como gerenciar melhor a reconexão Bluetooth após uma impressão bem-sucedida?
Postado

Sim.

procedure TdmImpressao.printImp(value: TMemo);
begin
   try
      try
         if not ACBrPosPrinter1.Device.PedirPermissoesBlueTooth then
            exit;

         ACBrPosPrinter1.Porta := 'BTH:MPT-III';
         ACBrPosPrinter1.Device.TimeOut := 30000;
         ACBrPosPrinter1.ControlePorta := True;
         ACBrPosPrinter1.Ativar;

         ACBrPosPrinter1.Buffer.Text := value.Text;
         ACBrPosPrinter1.Imprimir;

      except
         on E: Exception do
         begin
            raise Exception.Create('Problema ao imprimir. Verifique se a impressora está ligada e próxima ao dispositivo. ' + E.Message);
         end;
      end;
   finally
      ACBrPosPrinter1.Desativar;
   end;
end;
 

   

 

Postado

Olá, pessoal!

Estou enfrentando dificuldades para resolver esse erro de conexão com minha impressora usando o ACBr. Já tentei várias formas, mas ainda sem sucesso. A impressora consegue imprimir uma vez, porém, para realizar uma nova impressão, preciso reiniciar o dispositivo, pois a conexão apresenta timeout.

Para contornar, implementei uma função que não utiliza o ACBr, e com isso consegui realizar a impressão. No entanto, ainda estou enfrentando problemas com a formatação do conteúdo.

Minha dúvida é: seria possível usar a tradução que o ACBr oferece (ou parte dela) nessa função que desenvolvi, para melhorar a formatação? Qualquer orientação para integrar a tradução ou dicas para o ajuste na conexão seriam de grande ajuda.

Agradeço desde já!

  • Solution
Postado

Olá pessoal! A solução para o meu caso foi simplesmente não fechar o socket. Optei por não utilizar o comando FecharSocket, pois essa abordagem resolveu o problema. Como essa solução é específica para minha situação, e não tenho outras impressoras para testar, não vou compartilhar o arquivo aqui. No entanto, implementei um tratamento para decidir se o FecharSocket deve ser utilizado ou não, dependendo do caso.

Uma observação interessante é que, ao debugar o código sem meus ajustes, o timeout não ocorria. Porém, ao rodar a aplicação normalmente (fora do modo de depuração), o timeout acontecia. Tentei até adicionar um Sleep após chamar o FecharSocket, mas isso também não resolveu.

Espero que essas informações possam ajudar outros desenvolvedores a encontrar uma correção, se necessário.

Obrigado.

  • Curtir 1
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.