1

Linux Bluetooth API Bluez を使用して、Android デバイスがデータを送受信できるようにするアプリケーションを開発したいと考えています。

PC 側については、次のコードを見てきました: http://people.csail.mit.edu/albert/bluez-intro/x502.html Android は RFCOMM プロトコルを使用しているため、または手動でプロトコルを設定することは不可能だと思います.

Android では Java API (Bluez API がロックされている) しか使用できず、SDP がうまく機能しないため、次の呼び出しを使用する必要があります。

InsecureBluetooth.createRfcommSocket(BlueDevice , Channel , false);

たとえば、コマンドによって返されるチャネルの 1 つである 0xC (12) にチャネルを設定すると、次のようになります。

sdptool browse local | grep Channel

Android アプリケーションは PC に正しく接続できます。

問題は、2 つのアプリケーションが通信できるようにするためのパラメーターが何であるかがわからないことです。PC 側には値 1 のポート番号しかありません。Android 側には、SDP で利用可能なサービスに割り当てられたチャネルがあります。しかし、SDP は Android では動作していません。

どんな助けでも大歓迎です。ありがとう

4

2 に答える 2

1

私はこの方法で解決しました:

SDP レコードを使用する PC 側の場合。無料でなければならないよく知られたチャンネルにサービスを記録する必要があります。つまり、他のサービスでは使用されません。それを確認するには、次のコマンドを実行します。

sdptool record local

これを行うコードはhttp://people.csail.mit.edu/albert/bluez-intro/x604.htmlにあります

セクション例 4-9。サービスの説明

この 2 行は、 // 汎用サービス ID を設定した後に追加する必要があります

// set the service class ID
sdp_list_t service_class = {NULL, &svc_uuid};
sdp_set_service_classes( record, &service_class);

他のサービスで使用されていないチャネルに変更する必要があります。たとえば、チャネル 1 :

uint8_t rfcomm_channel = 1;

PC 側をリッスンする何かができたので、残念ながら Android で SDP がまったく機能するようになったため、よく知られているリフレクション メソッドを使用して、Android デバイスをチャネル 1 に直接接続する必要があります。

Method bluetoothConnect;

bluetoothConnect = BlueDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class} );
CommunicationChannel = (BluetoothSocket) bluetoothConnect.invoke(BlueDevice, 1);

CommunicationChannel.connect();

もちろん、 BlueDevicestartDiscovery()メソッドによって無効化されたデバイスであり、「1」はチャネル 1 を表します。

于 2012-06-11T09:27:36.633 に答える
0

これがあなたの質問に答えていないことはわかっていますが、これには bluecove (http://bluecove.org/) の方が適していると思います。ほとんどのオペレーティング システムをサポートし、Java 用の適切なライブラリを提供します。

bluez は Windows では動作しないと思います。そのためには WIDCOMM または BlueSoleil スタックが必要であり、bluecove は適切なスタックを使用します。

于 2012-06-03T18:56:14.597 に答える