BluetoothSocket.getOutputStreamでOutputStreamオブジェクトを取得して、OutputStream.writeでデータを書き込む。
BluetoothSocket | Android Developers
MainActivity.javaで、
soc.connectで例外が起きなければ、soc.getOutputStreamでoutputStreamを取得し、outputStream.writeで"ABCDE"を書き込む。
で、サーバ側の準備。
サーバ側のプログラムを書く。
acceptが成功して、リモートアドレスが出力されたら、readで読み込んだ内容をread_bufに格納し、printfで出力。
出来たらコンパイル。
hciconfigは前回piscanしたのでこれでいいとして。
sdptool browse localを実行。
Channel: 22はなさそう。
やっぱないわ。
channel=22でSP追加。
今度は22があるみたい。
あった。
Fedoraなので一応ここも見ておく。
ちゃんと--compatはついてる。
パーミッション戻ってる。
一応777にする。
ここで、GUIの設定で、
Essential Phoneがいるのを確認。
これをクリックすると、
スマホ側に番号が出る。
PC側も同じ番号が出る。
これをどちらも了承してペアリングとなる。
スマホ側から、"localhost.localdomain"を押しても、両方出て同じ流れ。
正確にはペアリングと接続は別だけど接続しちゃってる。
クリックすると、
今の状態が見える。
トグルを押すと切断にもなるし、削除を押すとペアリングが解除される。
スマホ側も接続状態。
CUIでやる場合はbluetoothctlを使う。
今回は使わないけど。
infoのあとにBluetoothアドレス(先頭何文字か入力してあとはタブ補完が効く)で状態が見れる。
rfcommコマンドで/dev/rfcomm0とBluetoothアドレスを紐づける。
-aで一覧を確認できる。
作ってすぐclosedになってるのを確認したら、基本はこれでacceptできるはず。
この状態から、
アプリのlocalhost.localdomainを押す。
これが出て、
connectできて、
closeできた。
PC側は、
"ABCDE"を受け取れた。
ただし、このままもう1回やろうとすると、
こうなってしまって、
acceptを抜けないのでlistenを強制終了しないといけない。
closedってなってるけど、いったんrfcomm0をリリースしないといけない。
releaseして、一覧に残っていない状態で、またrfcommでアドレス登録してからなら、またacceptできるとおもう。
またできた。
Sample/android/BluetoothSocket/getOutputStream/src at master · bg1bgst333/Sample · GitHub