やはりお前らのandroidのbleが不安定だという認識は間違っている
DESCRIPTION
AndroidのBLEの安定性について、Android4.4.2が4機種手元にあったので、「つなぐ→読む→書く→切る」×100みたいなコードで試してみたところ、顕著な機種差分はなかったよ、というお話。TRANSCRIPT
![Page 1: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/1.jpg)
やはりお前らのAndroidのBLEが不安定だという認識は間違っている#potatotips #6 2014/04/09 @youten_redo(ようてん)
![Page 2: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/2.jpg)
Bluetooth Low Energyhttp://www.bluetooth.com/Pages/Bluetooth-Brand.aspx
![Page 3: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/3.jpg)
BLEはあんまりよく知らないという人への補足説明旧来のBluetoothとは結構違うけど、iOS(OS X)とAndroidでどっちでも使える楽しいやつだよ
WiFi・Cellular経由でのHTTP(IP)通信以外で、MFi不要でiOS(OS X)-Android間通信ができるよ
2年先輩のiOSと比べると遅れてるし、かなり新しいAndroidじゃないと標準対応していないけど、外部デバイスとの連携等、いろいろ魅力的でオススメだよ
![Page 4: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/4.jpg)
Android BLE unstable?
![Page 5: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/5.jpg)
4.3 cause unstable?
![Page 6: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/6.jpg)
Device List
Device Nexus 4 Nexus 5 HTC One GPE
Nexus 7 2013
Android version. 4.4.2 4.4.2 4.4.2 4.4.2
Image
![Page 7: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/7.jpg)
Target: iOS 7.1 Peripheral
P
C
https://github.com/youten/ImmPeri
https://github.com/youten/BLERW/tree/rwbench
![Page 8: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/8.jpg)
Test Environment
全機WiFiオン、自宅の無線LANルータ(b/g/n, 2.4GHz)に接続状態で試験
木造アパートなので近所のルータ多数
iBeacon含めBLEデバイスは5つほど存在
![Page 9: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/9.jpg)
BenchmarkDISCONNECTED
CONNECTING
CONNECTED
SERVICE DISCOVERED
READING CHARACTERISTIC
WRITING CHARACTERISTIC
How many seconds 100 laps
![Page 10: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/10.jpg)
100 laps average and read+write success rate
Device Nexus 4 Nexus 5 HTC One GPE
Nexus 7 2013
Android version. 4.4.2 4.4.2 4.4.2 4.4.2
Image
[no wait] 100 laps avr. success rate
25.36sec. 52.6%
23.93sec. 50.0%
28.02sec. 52.8%
22.37sec. 49.2%
![Page 11: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/11.jpg)
Add wait before re-connectDISCONNECTED
CONNECTING
CONNECTED
SERVICE DISCOVERED
READING CHARACTERISTIC
WRITING CHARACTERISTIC
How many seconds 100 laps
Add 50ms wait
![Page 12: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/12.jpg)
ResultDevice Nexus 4 Nexus 5 HTC One
GPENexus 7
2013Android version. 4.4.2 4.4.2 4.4.2 4.4.2
[no wait] 100 laps avr. success rate
25.36sec. 52.6%
23.93sec. 50.0%
28.02sec. 52.8%
22.37sec. 49.2%
[50ms wait] 100 laps avr. success rate
44.07sec. 87.8%
45.44sec. 92.8%
50.152sec. 94.0
43.864sec. 92.4%
![Page 13: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/13.jpg)
まとめAndroid 4.4.2にしたら致命的な機種差がなくなった
WiFiを同時に使うと不安定(Nexus 7 2013)みたいな話はなくなった模様。
BluetoothGatt#close忘れるな。インスタンス使い切ってスキャン不可になる。
アプリのスワイプキル or Bluetoothのon/offで復帰できるが、不安定だと勘違いしないように。ただのバグです。
対向装置はiOS/OS Xが楽。
Random Device Addressに注意、MACアドレスがランダムで変わる。
StickNFindとか実製品はおそらく省電力目的でセクシーにチューニングされている、また、ファームウェアバージョンも制御できないため、再現性の観点でもあまりオススメしない。
SNF、最新ファーム焼いちゃうとImmediate Alert Service非対応になっちゃったっぽい。
![Page 14: やはりお前らのAndroidのBLEが不安定だという認識は間違っている](https://reader034.vdocuments.site/reader034/viewer/2022052523/555ee900d8b42ab6408b5692/html5/thumbnails/14.jpg)
検証内容に対する追記たかだか100回読み書きするのに数十秒かかってるとか遅いじゃないか、って読み取っちゃうケースがあると思いますが、通常はこんなにCONNECT-DISCONNECTを連続で行わないのでもっと速いです。
アプリケーションとして、接続先を探したりしながら繋いだり切ったりしても妥当な範囲のリトライで、この程度安定して読み書き(≒送受信)ができますよ、という検証です。
BLEとしては向いていない(やるべきでない)ため意地悪試験になってしまうのですが、バイト列送受信のスループットがどの程度まで出るのかはそのうち試してみたいと思います。