Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FlutterでBLEを
いい感じにする

 FlutterでBLEを
いい感じにする

shibuya.apk #30 で話したものです.

Kazuki Chigita

December 13, 2018
Tweet

More Decks by Kazuki Chigita

Other Decks in Technology

Transcript

  1. 注意点 • デフォルトのminSdkVersion低すぎ問題 FAILURE: Build failed with an exception. *

    What went wrong: Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : uses- sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:flutter_blue] ... as the library might be using APIs not available in 16 Suggestion: use a compatible library with a minSdk of at most 16, or increase this project's minSdk version to at least 19, or use tools:overrideLibrary="com.pauldemarco.flutterblue" to force usage (may lead to runtime failures)
  2. 注意点 • デフォルトのminSdkVersion低すぎ問題 FAILURE: Build failed with an exception. *

    What went wrong: Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : uses- sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:flutter_blue] ... as the library might be using APIs not available in 16 Suggestion: use a compatible library with a minSdk of at most 16, or increase this project's minSdk version to at least 19, or use tools:overrideLibrary="com.pauldemarco.flutterblue" to force usage (may lead to runtime failures) よーしbuild.gradleのminSdkVersionを19にするか〜
  3. AndroidのBLE周りの歴史[2] • Android 4.3未満 (API Level 17) BLE未対応 • Android

    4.4 (API Level 19) BLE安定する • Android 5.0 (API Level 21) android.bluetooth.leになる • Android 6.0 (API Level 23) RuntimePermissionくる [2] BLE視点でまとめるAndroid OSの違い https://qiita.com/ozyozyo/items/351babdf2160d733a306
  4. AndroidのBLE周りの歴史[2] • Android 4.3未満 (API Level 17) BLE未対応 • Android

    4.4 (API Level 19) BLE安定する • Android 5.0 (API Level 21) android.bluetooth.leになる • Android 6.0 (API Level 23) RuntimePermissionくる [2] BLE視点でまとめるAndroid OSの違い https://qiita.com/ozyozyo/items/351babdf2160d733a306
  5. AndroidのBLE周りの歴史[2] • Android 4.3未満 (API Level 17) BLE未対応 • Android

    4.4 (API Level 19) BLE安定する • Android 5.0 (API Level 21) android.bluetooth.leになる • Android 6.0 (API Level 23) RuntimePermissionくる [2] BLE視点でまとめるAndroid OSの違い https://qiita.com/ozyozyo/items/351babdf2160d733a306 minSdkLevelを19にすると21で追加された 機能が実装されている保証はない.
  6. AndroidのBLE周りの歴史[2] • Android 4.3未満 (API Level 17) BLE未対応 • Android

    4.4 (API Level 19) BLE安定する • Android 5.0 (API Level 21) android.bluetooth.leになる • Android 6.0 (API Level 23) RuntimePermissionくる [2] BLE視点でまとめるAndroid OSの違い https://qiita.com/ozyozyo/items/351babdf2160d733a306 minSdkLevelを19にすると21で追加された 機能が実装されている保証はない. この事実はFlutter のみでコードを 書いていると気が付きにくい (APIの差異によって挙動が変わることはflutter_blueの コードを読まない限り推測しにくい)
  7. 小さなプロジェクトで試してみた[5] • Futureで実装されているものを全てRxのstreamに 変換. • 良かった点 • 関係するイベントが散らばらずに一つのstreamとして 表現できる. •

    async / await ベースではない非同期処理. • 悪かった点 • rx_dartがまだまだ未発達(RxJava2と比べると機能が少 ない) [5] https://github.com/cyder/nigiru_kun_sp/tree/master/lib/datasources/bluetooth
  8. コード例(scan) 1. streamを持ってくる. 2. 接続可能なものでフィルタする. 3. 検出されたもののserviceのuuidをみてみる. 4. そのうち,自分たちの作ったデバイスのものだけをフィルタする. 5.

    見つけたデバイスに付加情報をつけて管理しやすいクラスに変換する. 6. 同じデバイスを何度も検出してしまう可能性があるので排除する.
  9. Related URLs [各言語でのBLE実装ドキュメント] • https://pub.dartlang.org/packages/flutter_blue • https://developer.android.com/guide/topics/connectivity/bluetooth-le • https://developer.apple.com/documentation/corebluetooth [各言語でのRxによるBLEのラップ例]

    • https://github.com/Polidea/RxAndroidBle • https://github.com/Polidea/RxBluetoothKit [flutter_blueについて書いた記事] • https://qiita.com/chigichan24/items/89cb686e880f0274ed1c [BLEの仕様・用語] • https://www.bluetooth.com/ja-jp/specifications/bluetooth-core-specification • https://codezine.jp/article/detail/9287