0

現在、Android Wifi と Bluetooth API を一緒に使用することについて質問があります。

(通常のユーザーガイドではなく、アプリ開発上の問題ですのでご注意ください)

Bluetooth 経由でデバイスを検索すると同時に、Wifi 経由でデバイスのサービスを検索すると問題が発生します。

詳細については:

  • Wi-Fi 検索では、Bonjour プロトコル (ローカル ネットワーク デバイスが提供するサービスの検索に役立つ Apple の Zeroconf の実装) を使用します。私が使用する Java 実装はjmdnsです。検索セッション中に、Bonjour のマルチキャスト パッケージを受信するためにMulticastLockを作成します。

  • Bluetooth検索では、BluetoothAdapterをBroadcastReceiverと一緒に使用して、Bluetoothデバイス情報を取得します。

上記の 2 つの検索セッションを同時に実行すると、Bonjour (Wifi) 検索での mysearch 結果が、単独で実行した場合のように十分に得られないという問題が発生します。

例: Bonjour 検索は、Bluetooth と一緒に検索すると、2 つのデバイスのサービスではなく 1 つのサービスを取得します。ただし、Bluetooth の検索結果は常に十分です。

これは何度も試してみましたが、ネットワークの強度の問題に関連するものは何もないことを確認しています.

誰もまだこの問題に遭遇しましたか?

Wi-Fi と Bluetooth を併用する場合でも、経験やゲストの情報があればとても助かります。

コイ。

4

1 に答える 1

0

私はあなたがしていることとほとんど同じことをしています。私の経験は次の点で異なります。

  • 接続したいデバイスがわかっているので、Bluetooth 検出は使用しません。クライアント接続を開始するだけです。
  • バックグラウンド操作には Asynctasks を使用します。何を使っていますか?

考えられる 2 つの問題:

  1. Android の実装に問題があるため、複数の Asynctasks が並行して実行されません。Android API ターゲットを最新の SDK に設定した後、同様のバグが発生しました (これがベスト プラクティスであるため)。現在、API13 の後、Android Asynctask の実装が変更され、タスクが並列で実行されなくなりました (たとえば、Bluetooth スレッドが実行されている場合、私の wifi スレッドは開始されませんでした!!!)。修正は、デフォルトのエグゼキューターを再び並列にするために数行のコードを追加するか、ターゲット バージョンとして API11 以下を使用することです。詳細については、このスレッドを参照してください。

  2. 2 間の OverTheAir 干渉。Bluetooth 検出は、私の知る限り、Bluetooth で実行できる最もコストのかかる操作です。そのため、2.4GHz の多目的チップが空中で圧倒される可能性があります。内部的には WiFi と BT が共存しています。2.4GHz を介した WiFi と Bluetooth のチャネルが重なっていることに注意してください。だから私が言っていることは、同時に同じ主な周波数で発見を行うことはそれほどうまくいかないかもしれませ. あなたはそれを調査する必要があります...

于 2013-03-21T14:02:50.873 に答える