まだ未解決ですが、途中経過をメモとしてまとめ。
Android 端末と Bluetooth デバイスを接続しようとした際に発生した、java.io.IOException: read failed, socket might closed or timeout, read ret: -1
というエラーについてです。
デバイスの検出までは問題なく実装出来ましたが、ここからどハマりしています。
このエラーについて参考にさせていただいた記事はこちらから。
IOException: read failed, socket might closed – Bluetooth on Android 4.3
– Stack Overflow
https://stackoverflow.com/questions/18657427/ioexception-read-failed-socket-might-closed-bluetooth-on-android-4-3Bluetooth の概要|Android デベロッパー|Android Developers
https://developer.android.com/guide/topics/connectivity/bluetooth.html
1つ目の記事によると、BluetoothSocket での接続に失敗した際、try/catch
の catch
の中で、再接続をするという投稿が一番有益なようでしたが、別のエラーが発生し、アプリがクラッシュしました…。
また、InputStream
と OutputSteram
を閉じていないということも原因として考えられるとのことでしたが、そもそも呼び出していないからこちらは該当せず。
また、2つめの Android Developers のページによると、Android 端末と Bluetooth デバイスを接続する前に、必ず Bluetooth デバイス検知の処理を終了させるようにとの記述がありました。
デバイスの検出を実行していると、接続の試行処理が大幅に遅くなり、失敗する可能性があります、とのことです。
自分のコードを確認したところ、その辺りの処理がちょっと怪しかったので修正し、きちんと Bluetooth デバイスの検出を終了させてから、接続を行うようにしました。
が、それでもだめでした!もう嫌!
自分で 1から書いているのが悪いのかと、接続の部分の処理で下記のライブラリを利用したりもしてみましたが、エラー文は全く同じでした。
GitHub – OmarAflak/Bluetooth-Library: Bluetooth client library for Android.
https://github.com/OmarAflak/Bluetooth-Library
Cordova アプリでは、接続からデータ取得まで何の問題もなく行えたので、端末自体に問題はないということは分かっているのですが…。
時間が許せば、上記ライブラリを使って最初から書き直してみようかなと思います。
以上、Android 端末と Bluetooth デバイスを接続しようとした際に発生するエラー「java.io.IOException: read failed, socket might closed or timeout, read ret: -1」についてでした。
早く解決させたい!