スマホでのBluetooth通信(接続)2

■Bluetooth通信の接続その2。
前回まで作成したコードに InputStream、OutputStream を追加してデータ通信を行おうとしている。前の手順を更新して下のように行う。

1.別のスレッドで、BluetoothAdapter クラスの listenUsingRfcommWithServiceRecord メソッドから得た BluetoothServerSocket クラスの accept メソッドを実行してリスニングの状態にする。accept が成功すると(おそらく次の2の connect が成功すること)BluetoothSocket クラスを返すので、そこに接続(サーバ側)。
2.別のスレッドで、BluetoothDevice クラス(Bluetooth のアドレスが必要)の createRfcommSocketToServiceRecord から得た BluetoothSocket クラスの connect メソッドを実行して接続(クライアント側)。
3.1,2で接続が完了した BluetoothSocket クラスから InputStream, OutputStream を取得しデータ通信。

Android Studio のウェブサイトにサンプルコードがあるので、コーディングは正しいと思うけど、2つの場所でエラーが出ている。

1つ目は、BluetoothSocket クラスで connect メソッドを実行したときの IOException 。
(java.io.IOException: read failed, socket might closed or timeout, read ret: -1)


これ自体はネットで回避策があったので、それを使って何とかなりそう。回避した後に2つ目が出た。
2つ目は、InputStream で read を行った際の NullPointerException 。
(java.lang.NullPointerException: Attempt to invoke virtual method 'int java.io.InputStream.read(byte[], int, int)' on a null object reference)


InputStream自体が null となっているわけではないので、なぜこれが起きるのかよく分からない。Thread クラスを使ったコーディングが何か関係しているかもしれないので、Thread クラスとか synchronized の修飾子とかを少し見てみたい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です