BluetoothSocket.getOutputStream

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したのでこれでいいとして
hciconfigは前回piscanしたのでこれでいいとして

hciconfigは前回piscanしたのでこれでいいとして。

sdptool browse local
sdptool browse local

sdptool browse localを実行。

Channel: 22はなさそう
Channel: 22はなさそう

Channel: 22はなさそう。

やっぱないわ
やっぱないわ

やっぱないわ。

channel=22でSP追加
channel=22でSP追加

channel=22でSP追加。

今度は22があるみたい
今度は22があるみたい

今度は22があるみたい。

あった
あった

あった。

Fedoraなので一応ここも見ておく
Fedoraなので一応ここも見ておく

Fedoraなので一応ここも見ておく。

ちゃんと--compatはついてる
ちゃんと--compatはついてる

ちゃんと--compatはついてる。

パーミッション戻ってる
パーミッション戻ってる

パーミッション戻ってる。

一応777にする
一応777にする

一応777にする。
ここで、GUIの設定で、

Essential Phoneがいるのを確認
Essential Phoneがいるのを確認

Essential Phoneがいるのを確認。
これをクリックすると、

スマホ側に番号が出る
スマホ側に番号が出る

スマホ側に番号が出る。

PC側も同じ番号が出る
PC側も同じ番号が出る

PC側も同じ番号が出る。
これをどちらも了承してペアリングとなる。
スマホ側から、"localhost.localdomain"を押しても、両方出て同じ流れ。

正確にはペアリングと接続は別だけど接続しちゃってる
正確にはペアリングと接続は別だけど接続しちゃってる

正確にはペアリングと接続は別だけど接続しちゃってる。
クリックすると、

今の状態が見える。トグルを押すと切断にもなるし、削除を押すとペアリングが解除される。
今の状態が見える。トグルを押すと切断にもなるし、削除を押すとペアリングが解除される。

今の状態が見える。
トグルを押すと切断にもなるし、削除を押すとペアリングが解除される。

スマホ側も接続状態
スマホ側も接続状態

スマホ側も接続状態。

CUIでやる場合はbluetoothctlを使う
CUIでやる場合はbluetoothctlを使う

CUIでやる場合はbluetoothctlを使う。
今回は使わないけど。

infoのあとにBluetoothアドレス(先頭何文字か入力してあとはタブ補完が効く)で状態が見れる
infoのあとにBluetoothアドレス(先頭何文字か入力してあとはタブ補完が効く)で状態が見れる

infoのあとにBluetoothアドレス(先頭何文字か入力してあとはタブ補完が効く)で状態が見れる。

rfcommコマンドで/dev/rfcomm0とBluetoothアドレスを紐づける
rfcommコマンドで/dev/rfcomm0とBluetoothアドレスを紐づける

rfcommコマンドで/dev/rfcomm0とBluetoothアドレスを紐づける。
-aで一覧を確認できる。
作ってすぐclosedになってるのを確認したら、基本はこれでacceptできるはず。

この状態から
この状態から

この状態から、

アプリのlocalhost.localdomainを押す
アプリのlocalhost.localdomainを押す

アプリのlocalhost.localdomainを押す。

これが出て
これが出て

これが出て、

connectできて
connectできて

connectできて、

closeできた
closeできた

closeできた。
PC側は、

"ABCDE"を受け取れた
"ABCDE"を受け取れた

"ABCDE"を受け取れた。
ただし、このままもう1回やろうとすると、

こうなってしまって
こうなってしまって

こうなってしまって、

acceptを抜けないのでlistenを強制終了しないといけない
acceptを抜けないのでlistenを強制終了しないといけない

acceptを抜けないのでlistenを強制終了しないといけない。
closedってなってるけど、いったんrfcomm0をリリースしないといけない。

releaseして、一覧に残っていない状態で、またrfcommでアドレス登録してからなら、またacceptできるとおもう。
releaseして、一覧に残っていない状態で、またrfcommでアドレス登録してからなら、またacceptできるとおもう。

releaseして、一覧に残っていない状態で、またrfcommでアドレス登録してからなら、またacceptできるとおもう。

またできた
またできた

またできた。

Sample/android/BluetoothSocket/getOutputStream/src at master · bg1bgst333/Sample · GitHub