SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
やはりお前らのAndroidのBLE
が不安定だという認識は間違っ
ている
#potatotips #6
2014/04/09 @youten_redo(ようてん)
Bluetooth Low Energy
http://www.bluetooth.com/Pages/Bluetooth-
Brand.aspx
BLEはあんまりよく知らない
という人への補足説明
旧来のBluetoothとは結構違うけど、iOS(OS X)とAndroid
でどっちでも使える楽しいやつだよ
WiFi・Cellular経由でのHTTP(IP)通信以外で、MFi不要で
iOS(OS X)-Android間通信ができるよ
2年先輩のiOSと比べると遅れてるし、かなり新しい
Androidじゃないと標準対応していないけど、外部デバ
イスとの連携等、いろいろ魅力的でオススメだよ
Android BLE unstable?
4.3 cause unstable?
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
Target: iOS 7.1 Peripheral
P
C
https://github.com/
youten/ImmPeri
https://github.com/youten/
BLERW/tree/rwbench
Test Environment
全機WiFiオン、自宅の無線LANルータ(b/g/n, 2.4GHz)
に接続状態で試験
木造アパートなので近所のルータ多数
iBeacon含めBLEデバイスは5つほど存在
Benchmark
DISCONNECTED
CONNECTING
CONNECTED
SERVICE DISCOVERED
READING CHARACTERISTIC
WRITING CHARACTERISTIC
How many seconds 100 laps
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%
Add wait before re-connect
DISCONNECTED
CONNECTING
CONNECTED
SERVICE DISCOVERED
READING CHARACTERISTIC
WRITING CHARACTERISTIC
How many seconds 100 laps
Add 50ms wait
Result
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
[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%
まとめ
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非対応になっちゃったっぽい。
検証内容に対する追記
たかだか100回読み書きするのに数十秒かかってるとか遅い
じゃないか、って読み取っちゃうケースがあると思いますが、
通常はこんなにCONNECT-DISCONNECTを連続で行わないので
もっと速いです。
アプリケーションとして、接続先を探したりしながら繋いだり
切ったりしても妥当な範囲のリトライで、この程度安定して読
み書き( 送受信)ができますよ、という検証です。
BLEとしては向いていない(やるべきでない)ため意地悪試験
になってしまうのですが、バイト列送受信のスループットがど
の程度まで出るのかはそのうち試してみたいと思います。

Más contenido relacionado

La actualidad más candente

Usb接続するアプリを開発した時に試行錯誤した事
Usb接続するアプリを開発した時に試行錯誤した事Usb接続するアプリを開発した時に試行錯誤した事
Usb接続するアプリを開発した時に試行錯誤した事Masataka Kono
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
AWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto Scaling
AWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto ScalingAWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto Scaling
AWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto ScalingAmazon Web Services Japan
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)Trainocate Japan, Ltd.
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)NTT DATA Technology & Innovation
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割Recruit Lifestyle Co., Ltd.
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解都元ダイスケ Miyamoto
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜Masaru Kurahayashi
 
IDaaS を正しく活用するための認証基盤設計
IDaaS を正しく活用するための認証基盤設計IDaaS を正しく活用するための認証基盤設計
IDaaS を正しく活用するための認証基盤設計Trainocate Japan, Ltd.
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門Yuichi Ito
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてHiroyuki Wada
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るTakeru Maehara
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱うIgaHironobu
 

La actualidad más candente (20)

Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。 【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
 
Usb接続するアプリを開発した時に試行錯誤した事
Usb接続するアプリを開発した時に試行錯誤した事Usb接続するアプリを開発した時に試行錯誤した事
Usb接続するアプリを開発した時に試行錯誤した事
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
AWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto Scaling
AWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto ScalingAWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto Scaling
AWS Black Belt Tech シリーズ 2015 - Amazon EC2 スポットインスタンス & Auto Scaling
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
IDaaS を正しく活用するための認証基盤設計
IDaaS を正しく活用するための認証基盤設計IDaaS を正しく活用するための認証基盤設計
IDaaS を正しく活用するための認証基盤設計
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについて
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
AWS BlackBelt AWS上でのDDoS対策
AWS BlackBelt AWS上でのDDoS対策AWS BlackBelt AWS上でのDDoS対策
AWS BlackBelt AWS上でのDDoS対策
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
FlutterでGraphQLを扱う
FlutterでGraphQLを扱うFlutterでGraphQLを扱う
FlutterでGraphQLを扱う
 

Similar a やはりお前らのAndroidのBLEが不安定だという認識は間違っている

BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~Taisuke Oe
 
Android BLEのつらみを予防するTips
Android BLEのつらみを予防するTipsAndroid BLEのつらみを予防するTips
Android BLEのつらみを予防するTipsTaisuke Oe
 
CoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスCoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスShin Ise
 
Beenos creators'night#201307今井
Beenos creators'night#201307今井Beenos creators'night#201307今井
Beenos creators'night#201307今井Daisuke Imai
 
Windows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよWindows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよKenji Wada
 
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50NorioIkedo
 
Androidとは。ちょっと変った視点から
Androidとは。ちょっと変った視点からAndroidとは。ちょっと変った視点から
Androidとは。ちょっと変った視点からdemuyan
 

Similar a やはりお前らのAndroidのBLEが不安定だという認識は間違っている (10)

BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
 
Android BLEのつらみを予防するTips
Android BLEのつらみを予防するTipsAndroid BLEのつらみを予防するTips
Android BLEのつらみを予防するTips
 
CoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low EnergyデバイスCoreBluetoothでつくるBluetooth Low Energyデバイス
CoreBluetoothでつくるBluetooth Low Energyデバイス
 
CEATEC土産話
CEATEC土産話CEATEC土産話
CEATEC土産話
 
Beenos creators'night#201307今井
Beenos creators'night#201307今井Beenos creators'night#201307今井
Beenos creators'night#201307今井
 
Windows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよWindows PhoneについてGdgd話すよ
Windows PhoneについてGdgd話すよ
 
Beaconのお話
Beaconのお話Beaconのお話
Beaconのお話
 
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
Bluetoothデュアルモジュールを使ってみた話 @IoTLT vol.50
 
Androidとは。ちょっと変った視点から
Androidとは。ちょっと変った視点からAndroidとは。ちょっと変った視点から
Androidとは。ちょっと変った視点から
 
GotAPIの概要と技術解説
GotAPIの概要と技術解説GotAPIの概要と技術解説
GotAPIの概要と技術解説
 

Más de youten (ようてん)

ネトゲで人生を脅かされた人は今VRで何を思うのか
ネトゲで人生を脅かされた人は今VRで何を思うのかネトゲで人生を脅かされた人は今VRで何を思うのか
ネトゲで人生を脅かされた人は今VRで何を思うのかyouten (ようてん)
 
CardboardとDaydreamの覚えてなくても困らない話 #ABC2017s
CardboardとDaydreamの覚えてなくても困らない話 #ABC2017sCardboardとDaydreamの覚えてなくても困らない話 #ABC2017s
CardboardとDaydreamの覚えてなくても困らない話 #ABC2017syouten (ようてん)
 
「0.5VRぐらい」の話 #VRごっちゃにLT #cluster
「0.5VRぐらい」の話 #VRごっちゃにLT #cluster「0.5VRぐらい」の話 #VRごっちゃにLT #cluster
「0.5VRぐらい」の話 #VRごっちゃにLT #clusteryouten (ようてん)
 

Más de youten (ようてん) (20)

Why VTuber?
Why VTuber?Why VTuber?
Why VTuber?
 
ネトゲで人生を脅かされた人は今VRで何を思うのか
ネトゲで人生を脅かされた人は今VRで何を思うのかネトゲで人生を脅かされた人は今VRで何を思うのか
ネトゲで人生を脅かされた人は今VRで何を思うのか
 
Google VRとDaydreamの最近の話
Google VRとDaydreamの最近の話Google VRとDaydreamの最近の話
Google VRとDaydreamの最近の話
 
CardboardとDaydreamの覚えてなくても困らない話 #ABC2017s
CardboardとDaydreamの覚えてなくても困らない話 #ABC2017sCardboardとDaydreamの覚えてなくても困らない話 #ABC2017s
CardboardとDaydreamの覚えてなくても困らない話 #ABC2017s
 
本を書こう(雑に)
本を書こう(雑に)本を書こう(雑に)
本を書こう(雑に)
 
Android History 2016
Android History 2016Android History 2016
Android History 2016
 
「0.5VRぐらい」の話 #VRごっちゃにLT #cluster
「0.5VRぐらい」の話 #VRごっちゃにLT #cluster「0.5VRぐらい」の話 #VRごっちゃにLT #cluster
「0.5VRぐらい」の話 #VRごっちゃにLT #cluster
 
Android History 2015
Android History 2015Android History 2015
Android History 2015
 
IoTゲームの難易度雑感
IoTゲームの難易度雑感IoTゲームの難易度雑感
IoTゲームの難易度雑感
 
錬金術師ごっこ #OcuJam #Ocunif
錬金術師ごっこ #OcuJam #Ocunif錬金術師ごっこ #OcuJam #Ocunif
錬金術師ごっこ #OcuJam #Ocunif
 
Android History 2014
Android History 2014Android History 2014
Android History 2014
 
Oculus Rift+Unity+MMD #andeb
Oculus Rift+Unity+MMD #andebOculus Rift+Unity+MMD #andeb
Oculus Rift+Unity+MMD #andeb
 
SeikenWear その1
SeikenWear その1SeikenWear その1
SeikenWear その1
 
Google I/O 2014
Google I/O 2014Google I/O 2014
Google I/O 2014
 
JSON吸って吐く機械
JSON吸って吐く機械JSON吸って吐く機械
JSON吸って吐く機械
 
BLEくびかりぞく
BLEくびかりぞくBLEくびかりぞく
BLEくびかりぞく
 
AndroidとiOSのBLEな事情 3
AndroidとiOSのBLEな事情 3AndroidとiOSのBLEな事情 3
AndroidとiOSのBLEな事情 3
 
20131126 Android昔話 2013
20131126 Android昔話 201320131126 Android昔話 2013
20131126 Android昔話 2013
 
FourBeat apk, enchant.js memo #FourBeat
FourBeat apk, enchant.js memo #FourBeatFourBeat apk, enchant.js memo #FourBeat
FourBeat apk, enchant.js memo #FourBeat
 
20121113 Android昔話2012
20121113 Android昔話201220121113 Android昔話2012
20121113 Android昔話2012
 

やはりお前らのAndroidのBLEが不安定だという認識は間違っている