Bluetooth経由でサーマルプリンターと通信してデータを印刷するアプリケーションがあります。
outputStream に書き込み、すべてのデータが確実に書き込まれるようにフラッシュしてから、ソケットを閉じます。ただし、実際にはすべてが出力される前に socket.close() コマンドが実行されるため、出力が切り取られます。
これは、データを書き込む際の私のシーケンスです (これは巨大な try-finally ブロックにあります):
//open socket here, assign outputStream, write data to be printed
//after all those mmOutStream.write() statements, these are on the finally statement
mmOutStream.flush();
mmOutStream.close();
socket.close();
ご覧のとおり、フラッシュを呼び出してすべてのデータが書き込まれるようにし、ストリームを閉じてからソケットを閉じます。
ただし、実際に起こると思うのは、すべてが正常に印刷される前であっても、socket.close() ステートメントが実行されることです。
これまでのところ、私が行ったことは、Close ステートメントの前に Thread.sleep() コマンドを配置することですが、それは私が望む解決策ではありません。
ソケットを閉じる前に OutputStream が実際にフラッシュ/空であることを確認する方法を知っている人はいますか? Bluetooth Socket と OutputStream のドキュメントを見てきましたが、私が望むことを行う簡単な方法はないようです。
どんなアイデアでも役に立ちます。ありがとう。