2016-12-28 9 views

答えて

3

接続の数が現在定数MAX_L2CAP_LINKSとGATT_MAX_PHY_CHANNELによって制限されている(まだ)あなたは真の自動接続=で8デバイスを接続しようとした場合、スタックはハングとに失敗します7.

に設定Android Mに導入されたバグのためにBluetoothを再起動するまで再接続してください。autoConnect = falseを使用して8番目のデバイスに接続すると、直ちにnewState = disconnectedでonConnectionStateChangeコールバックを取得し、接続を試みません。

なぜこれらの定数が低いのか分かりません。多くの場合、ハードウェア自体は7以上の処理を実行できます。たとえば、AOSPを自分でコンパイルして定数を変更すると、Nexus 6Pは15になります。

サムスンはこの問題に気づき、デバイスのいくつかで定数を増やしたようです。たとえば、Samsung Galaxy Tab A 10.1は、変更なしで15個のBLE接続を処理できます。

+0

したがって、autoConnect = trueを指定しないで自分の接続デバイスのリストを管理すると、 私は他のデバイスに接続できますか? –

+0

No. autoConnect = falseを使用して8番目のデバイスに接続すると、すぐにnewState = disconnectedを指定してonConnectionStateChangeコールバックを取得し、接続を試みません。 – Emil

0

これらの定数はアプリごとではなく、グローバルな制限であるようです。私はAndroidのBTスタックのソースにリンクしています。私はなぜこれらの定数がそのままであるのだろう...無作為に見える。

#define GATT_MAX_PHY_CHANNEL 7

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/master/include/bt_target.h#1428

#define BTA_GATTC_CONN_MAX GATT_MAX_PHY_CHANNEL

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/master/bta/gatt/bta_gattc_int.h#89

tBTA_GATTC_CONN conn_track[BTA_GATTC_CONN_MAX];

https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/master/bta/gatt/bta_gattc_int.h#424

これは公式のAndroidコードです。 Android 7.2まで、ベンダーはその実装を多く変更していました。 Android 8以上の理論では、ベンダーはそれを修正してはいけません(少なくともこの回答を書いた時点で、実際にこの仕組みがどのように機能するかについては、現場のAndroid 8デバイスでは不十分です)。

関連する問題