1

BluetoothのRFCOMMを使用してAndroidアプリを作成しました。同じRFCOMMUUIDを介して1MBのデータをAndroidアプリに送信しています。

私のアプリで1つのL2CAPパケットデータが欠落していることに気づきました。詳細については、以下の情報を参照してください。

最大RFCOMMペイロードをサポートする私のAndroidモバイルBluetoothは990バイトであるため、リモートデバイスは990バイトのペイロードで各L2CAPパケットを送信しています。リモートデバイスから1Kのデータを送信するときは常に、それぞれ990バイトと34バイトの2つのL2CAPパケットに分割されています。

Androidアプリでデータを受信した後、各1Kデータを確認しました。そこで、1つのL2CAPパケット、つまりAndroidで990バイトがスキップされていることに気付きました。

アナライザーを使用して、リモートデバイスから送信されるすべてのデータを確認しました。1MBのデータを確実に送信しています。

しかし、私のAndroidアプリでのみ、受信できません。ここではBluetoothチャットのサンプルコードを使用したため、これは私のアプリでは問題ありません。

これを数回テストしましたが、テストを実行するたびに、失われた990バイトのデータが1MBのデータで同じインデックスになりません。

私はこれをAndroid2.2、2.3.3、2.3.6バージョンの3つの携帯電話でテストしました。各携帯電話は同じ問題を抱えています

しかし、RFCOMMソケットのInputStreamからもデータを受信して​​いる間、例外は発生しません。

誰かが私の問題に直面して解決した場合は、私を助けてください。

4

2 に答える 2

0

2つのデバイス間で送受信されたACLデータをHCIDumpツールで確認できますか。データがHCIACLデータパケット/送信および受信と一致している場合、受信側のL2CAPはいくつかのパケットをドロップしています。

このリンクを見て、mtuがこの問題を引き起こす可能性があるかどうかを確認してください。

http://people.csail.mit.edu/albert/bluez-intro/x559.html

ありがとうマニヴァンナン

于 2013-01-22T13:22:55.673 に答える
0

すべてのデータを送信した後、ストリームをフラッシュしたい場合があります。RFCOMM は、PDU がいっぱいになるまでデータをバッファリングする可能性があります。これを参照してください - OutputStream::flush()

于 2013-01-23T18:17:37.243 に答える