Bluetoothが言う事を聞きません。
一応動作はしているようだし、ペアリングもできますし、Voyage側からAndroidにpingを打つと応答が帰ってきます。
これはWindowsXPに付けたBluetoothドングルに発信したとき
こっちはAndroidに発信したとき
Android側は受信バイト数が0なのでなんかおかしいようです。
![bt.png](http://diylabo.sakura.ne.jp/diy/assets_c/2012/02/bt-thumb-320x533-24.png)
Android側で見ると「Connected」と書いてあります。
でも、Android側から
のsock.connect()で例外「java.io.IOException: Service discovery failed」が起こって通信できません。
文面からすると、Voyage側のrfcommサービスが見つからないということみたいです。
BluetoothはTCP/IPのソケットよりも洗練されている仕様ですが、それだけに動作も複雑で今ひとつよくわかりません。
ネットを探しても、LinuxにBluetoothマウスなどの周辺機器を接続する例などは先人のレポートがいろいろありますが、Androidをつなぐというのはほとんど見つかりませんでした。少しだけGUIツールを使って接続する例が見つかりますが、VoyageにはGUIがないのであまり参考になりません。
それにAndroid2.2のBluetoothは、使える機能が少なく中途半端間が否めません。
LinuxのBluetoothスタックはBluezというパッケージを使用しますが、これも設定方法がバージョンでいろいろで何が正しいのやら。Bluezのソースを見るとD-BUSにかなり依存しているようで、なぞは深まるばかりです orz
一応動作はしているようだし、ペアリングもできますし、Voyage側からAndroidにpingを打つと応答が帰ってきます。
これはWindowsXPに付けたBluetoothドングルに発信したとき
root@voyage:~# l2ping 00:1B:DC:04:23:XX
Ping: 00:1B:DC:04:23:XX from 74:2F:68:E1:2F:XX (data size 44) ...
44 bytes from 00:1B:DC:04:23:XX id 0 time 9.77ms
44 bytes from 00:1B:DC:04:23:XX id 1 time 27.76ms
44 bytes from 00:1B:DC:04:23:XX id 2 time 19.77ms
3 sent, 3 received, 0% loss
こっちはAndroidに発信したとき
root@voyage:~# l2ping 8C:71:F8:28:B3:XX
Ping: 8C:71:F8:28:B3:XX from 74:2F:68:E1:2F:XX (data size 44) ...
0 bytes from 8C:71:F8:28:B3:XX id 0 time 73.78ms
0 bytes from 8C:71:F8:28:B3:XX id 1 time 34.74ms
0 bytes from 8C:71:F8:28:B3:XX id 2 time 32.78ms
3 sent, 3 received, 0% loss
Android側は受信バイト数が0なのでなんかおかしいようです。
![bt.png](http://diylabo.sakura.ne.jp/diy/assets_c/2012/02/bt-thumb-320x533-24.png)
Android側で見ると「Connected」と書いてあります。
でも、Android側から
try {
BluetoothSocket sock = device.createRfcommSocketToServiceRecord(RFCOMM_UUID);
sock.connect();
OutputStream os = sock.getOutputStream();
byte [] bytes = "Hello".getBytes("UTF-8");
os.write(bytes);
os.flush();
os.close();
sock.close();
}
catch(Exception e) {
Toast.makeText(this, "send error", Toast.LENGTH_LONG).show();
}
のsock.connect()で例外「java.io.IOException: Service discovery failed」が起こって通信できません。
文面からすると、Voyage側のrfcommサービスが見つからないということみたいです。
BluetoothはTCP/IPのソケットよりも洗練されている仕様ですが、それだけに動作も複雑で今ひとつよくわかりません。
ネットを探しても、LinuxにBluetoothマウスなどの周辺機器を接続する例などは先人のレポートがいろいろありますが、Androidをつなぐというのはほとんど見つかりませんでした。少しだけGUIツールを使って接続する例が見つかりますが、VoyageにはGUIがないのであまり参考になりません。
それにAndroid2.2のBluetoothは、使える機能が少なく中途半端間が否めません。
LinuxのBluetoothスタックはBluezというパッケージを使用しますが、これも設定方法がバージョンでいろいろで何が正しいのやら。Bluezのソースを見るとD-BUSにかなり依存しているようで、なぞは深まるばかりです orz
コメントする