2011-02-03 13 views
6

私のコントロールの外にあるハードウェアデバイスと対話するアンドロイドアプリケーションを書いています。固定チャネルのAndroid RFCOMMソケット

私のアプリケーションは、listenUsingRfcommWithServiceRecordとUUID 00001101-0000-1000-8000-00805F9B34FBを使用してリスニングソケットを作成します。次に、そのソケット上でaccept()を呼び出して、リモートデバイスが接続するのを待つが、それは決してしない。

私はハードウェアデバイスの製造元と話をしており、デバイスがリモートデバイスの「チャネル1に単に接続する」と言います。すなわち、正しいチャネル番号を見つけるためにSDP発見を行わない。彼らはこれを変更することを拒否します(もちろん間違っていますが)

私の質問は、固定RFCOMMチャンネル番号を使用するようにアンドロイドを強制する方法はありますか?おそらく、クライアントに接続するときにcreateRfcommSocketを直接呼び出すというような、リフレクションを使用しています。

答えて

1

これらのAPIは存在しますが、サポートされていません。それでも興味があれば、Android 1.5 backport of android.bluetoothのソースのソースコードを調べてください。

サポートされていないAPIとして、将来のリリースで削除できることに注意してください。

+0

返信いただきありがとうございます。 – didster

1

非常にハッキーなやり方は、すべてのチャンネルを消費し、それからあなたが望むものをリリースすることです!私はあなたと同じ問題を抱えています。このハックは苦情のない約1年間フィールドで働いています。これには抜け道があるので、成功はあなたのユースケースに依存します。

最大30個のチャネルがありますので、定義したUUIDで30個以下の接続を開きます。今、spdtoolを使って、あなたが望むチャンネルへのソケット接続のUUIDを見つけます。その接続を閉じます。

これで、あなたのケースでは1チャンネルしか利用できません。あなたが望むようにそれに接続してください。接続が確立されたら、他のすべての接続を閉じます。

私はそれが地獄のようなハッキーだと知っていますが、それは私のケースのために働いた!

関連する問題