SlideShare a Scribd company logo
7
Most read
12
Most read
14
Most read
Android BLEのつらみ
を予防するTips
Twitter : @OE_uia / GitHub: taisukeoe
自己紹介
麻植泰輔 / OE TAISUKE
- Twitter: @OE_uia
- GitHub: taisukeoe
- ScalaMatsuri co-chair
- deeplearning4j/nd4s author
- Android Developer
最近のお仕事
- BONX
- Scala研修
などなど
今日話すこと
● Bluetooth Low Energyとは?
● Android BLEのサポート状況
● Android BLE Central機能のつらみ
● つらみを予防するためのTips
● Bluetooth 4.0
● 2つの役割
○ Central: 見つける、接続する
○ Peripheral: 見つけられる、接続される
● IoTの文脈でしばしば用いられるため、BLEデバイスをiOS,
Android両方から触ることも少なくない
● iOS, Androidともに対応しているが、iOSの方が基本的に安
定動作している
● というより、Android BLEが不安定
Bluetooth Low Energy
BLEにおける2つの役割:
CentralとPeripheral
Scan
見つける側
(Central)
見つけられる側
(Peripheral)
BLE Advertise
Connect
AndroidのBLEのサポート状況
● OS
Central: 4.3以上〜
Peripheral: 5.0以上~
● チップセット
Central: 全てのチップが対応している(ハズだが、安定性の端末
差が激しい・・・)
Peripheral: Advertiseするには、BroadcomのHCIコマンド
`multiple advertisement`に対応している必要がある(そして、公
開されている端末仕様からはわからない)
詳しくは「BONXを支える技術: Bluetooth編 」
Android BLE Centralが不安定?
● Scanはおおよそ安定的に動作する
○ Advertise Packet
○ RSSI強度
○ MACアドレス
● Connectは端末差が大きいが、基本的に不安定。主な失敗
ポイント:
○ Peripheralに接続要求をしても、成功しない
○ 接続できても、目的の Service/Characteristicが見つからない
○ 目的のService/Characteristicが見つかっても、値の読み込み /書き
込みができない
※「成功しない」にも2パターン:「エラーが発生」or「返事が
返ってこない」
Android BLEつらい
● コード上で完全に克服するのは難しい
● 仕様で克服しよう
Android BLEのつらみを乗り超える仕様
● BLEを極力使わない
● Androidの動作対象端末を限定する
● BLE接続の頻度を下げる
● UUID指定のスキャンを前提にしない
Android BLEを極力使わない
● そもそも使わなければ問題が生じない
● それってBLE以外の技術、例えばClassic BT (SPP)で出来な
いのか?
● 実際、BONXではAndroid BLEの一部機能を、SPP経由で
IoTデバイスに肩代わりさせています。
Androidの動作対象端末を絞る
● ここ2年に発売されたフラッグシップ級の端末なら「比較的」
安定動作するものが多い。
● できるだけAndroid 4.3以下のサポートをしない。
● 可能なら、Android 4.4もサポート対象外とし、Android 5.0
以上のみ対応とする(BLE APIが4系と5系で異なるため)。
● さらに可能なら、発売当時Android 4.xだった端末もサポー
トしない。その当時のチップはAdvertiseに対応していないこ
とが多いなど、問題の元になることがある。
BLE接続の頻度を下げる
● Android BLEは接続のたびに、失敗するリスクがある
● 接続せずに、スキャンだけで済むならそれが良い
● 接続する必要があっても、接続回数および接続相手の数を
減らす
● 短時間の間にいろんな相手と接続/切断を繰り返すアプリが
一番大変
UUID指定のスキャンを前提にしない
● BLEスキャンのAPIには、Advertise Packetに含まれる
UUIDを指定したスキャンが用意されている。これにより接
続対象候補の端末を絞ることができる。
● しかし、iOSのAdvertisePacketは、データ領域が足りなく
なった場合などに`overflow領域`と呼ばれる特別な領域に
格納されるという仕様がある。`overflow領域`に格納された
UUIDは、iOSからのスキャンでは利用できるが、Android
のUUID指定スキャンでは利用できない
● iOSがAdvertiseする仕様において、AndroidはUUID指定
スキャンは実質使用することが難しい。
● BLEは節度を守って使う限りにおいて、とても便利な規格。
Android BLEに関してAPIが用意されているからと言って、
全面的に信頼したりしない。
● Android BLEを使用した機能の仕様を決める前に、以下の
ポイントはチェックしておくとつらみが減る(かもしれない)
○ BLEがベストな選択肢なのか?
○ サポート対象端末は?
○ 接続頻度は?
○ BLEスキャンの対象は?
● こんな方法でつらさを回避してるよ!って話があったらぜひ
教えてください
まとめ

More Related Content

PDF
ツライと評判のAndroid BLEを頑張って使い続けた話
PDF
殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
PDF
Hadoop入門
PDF
MySQLで論理削除と正しく付き合う方法
PDF
こわくない Git
PDF
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
PPTX
Node-REDからREST APIに接続
ツライと評判のAndroid BLEを頑張って使い続けた話
殺しても死なないアプリ 〜Core Bluetooth の「状態の保存と復元」機能〜
コンテナの作り方「Dockerは裏方で何をしているのか?」
Hadoop入門
MySQLで論理削除と正しく付き合う方法
こわくない Git
Boost.勉強会#19東京 Effective Modern C++とC++ Core Guidelines
Node-REDからREST APIに接続

What's hot (20)

PDF
Tackling Complexity
PDF
Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介
PDF
Dockerfile を書くためのベストプラクティス解説編
PPTX
Docker超入門
PPTX
MongoDBが遅いときの切り分け方法
PPTX
Argo CD Deep Dive
PDF
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
PDF
SolrとElasticsearchを比べてみよう
PDF
PostgreSQL:行数推定を読み解く
PDF
Ansible 2.10 と Collection
PDF
サイボウズの生産性を高める生産性向上チームと開発文化
PDF
ドメイン駆動設計 複雑さに立ち向かう
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PDF
社内ドキュメント検索システム構築のノウハウ
PDF
Concourseで快適な自動化の旅
PDF
Maven基礎
PDF
そのデータフロー NiFiで楽にしてあげましょう
PDF
Docker Compose 徹底解説
PDF
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
PDF
Docker道場オンライン#1 Docker基礎概念と用語の理解
Tackling Complexity
Zabbixローレベルディスカバリ機能&Zabbix2.2仮想環境監視機能紹介
Dockerfile を書くためのベストプラクティス解説編
Docker超入門
MongoDBが遅いときの切り分け方法
Argo CD Deep Dive
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
SolrとElasticsearchを比べてみよう
PostgreSQL:行数推定を読み解く
Ansible 2.10 と Collection
サイボウズの生産性を高める生産性向上チームと開発文化
ドメイン駆動設計 複雑さに立ち向かう
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
社内ドキュメント検索システム構築のノウハウ
Concourseで快適な自動化の旅
Maven基礎
そのデータフロー NiFiで楽にしてあげましょう
Docker Compose 徹底解説
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
Docker道場オンライン#1 Docker基礎概念と用語の理解
Ad

More from Taisuke Oe (11)

PDF
プレScalaMatsuri2019「スピーカー入門」
PDF
How to start functional programming (in Scala): Day1
PDF
Monix Taskが便利だという話
PDF
How to get along with implicits
PDF
What Dotty fixes @ Scala関西サミット
PDF
Real World Android Akka - 日本語版
PDF
AuxパターンをDottyで解決する
PDF
Real World Android Akka
PDF
Real world android akka
PDF
多相な関数の定義から学ぶ、型クラスデザインパターン
PDF
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
プレScalaMatsuri2019「スピーカー入門」
How to start functional programming (in Scala): Day1
Monix Taskが便利だという話
How to get along with implicits
What Dotty fixes @ Scala関西サミット
Real World Android Akka - 日本語版
AuxパターンをDottyで解決する
Real World Android Akka
Real world android akka
多相な関数の定義から学ぶ、型クラスデザインパターン
BONXを支える技術:Bluetooth編 ~Bluetoothを120%使い倒す方法~
Ad

Android BLEのつらみを予防するTips