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,
  • Este tópico foi criado há 154 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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
  • Este tópico foi criado há 154 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
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.

The popup will be closed in 10 segundos...