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