tamaさんはじめまして。ますいと申します。
2.0ではandroid.bluetooth.BluetoothServerSocket、BluetoothSocketというクラスを使って
SPPを扱えます。
BluetoothServerSocket/BluetoothSocketはそれぞれ、おおよそRfcomm(SPPが利用するプロトコル)のサー
バー/クライアントソケットに該当します。
しかし、Bluetooth APIはエミュレーターでは動作せず、またHT-03AのROMは1.5 - 1.6であるため実際に動作させることはで
きません。
現時点で、HT-03AでSPPを含めbluetoothを扱う場合は、非公開のAPIを利用する必要があります。
~1.6にもbluetooth APIは含まれているものの、APIが公開されておらず通常の方法では利用できませんが、
以下の方法で(無理やり)利用することができます。
1. ソースリポジトリからBluetooth APIのソースを持ってきて参照ライブラリなどに指定してAPIを解決する
2. リフレクションを使用してAPIを実行する。
~1.6ではSPPはandroid.bluetooth.RfcommSocketというクラスを介して使うことができます。
これはその名のとおり、Rfcommを扱うためのクラスで2.0と違いサーバー/クライアントに分かれていません。
(2.0でも実際はBluetoothServerSocketは内部でBluetoothSocketに処理を投げているだけのようですが)
しかし、1.6では以下の制限があります。
1. サーバーソケットを開いてもサービスレコードが更新されないため、クライアントから接続する際にチャンネルを固定する必要がある。
(通常、Bluetoothの接続ではSDPのクエリでプロファイルに対応するサーバーのチャンネルを実行時に獲得します)
この制限のため、通常のSPPクライアント(サービスレコードからチャンネルを決定する)からHT03Aに接続することができません。
接続が可能なケースは以下のケースに限ります。
1. HT03Aがクライアントとなる場合
2. HT03Aがサーバーとなり、且つクライアントがチャンネルを固定で指定する場合
最後に、以上のような非公開APIを扱うためのライブラリをご紹介しておきます。
WEB上などで"非公開Bluetooth APi"、または"非公式Bluetooth API"として有名なプロジェクトです
android-bluetooth:
http://code.google.com/p/android-bluetooth/
こちらは、拙作ですが自分が開発しているBluetoothアプリケーションを2.0対応にする準備としてホストしたプロジェクトで、
2.0のAPIを模しています。
backport-android-bluetooth:
http://code.google.com/p/backport-android-bluetooth/
以上、よろしくお願いします。
ますい