Androidと特定のペリフェラルとBluetooth LEで接続しようとするとき、Service UUIDを指定して、そのUUIDを持ったデバイスを探すのが常套手段かと思います。
しかし…
ただでさえAndroidでBLEを使うときに情報が少なくて困ってたのですが、ググってもググってもBLEに関してiOSは安定しているけどAndroidは使い物にならん、みたいな記事がわんさかでてきて不安で夜も寝られない日々を過ごしていました。
粘り強く色々と調べていると、どうやら比較的新しい情報が埋もれてしまっていたようで。
いい方法を見つけましたのでご紹介しておきます。
Blutooth LEを使ったアプリの大枠は以下のページがよくまとまっているので、こちらをご参考にしてみて下さい。
http://mslgt.hatenablog.com/entry/2015/05/17/212257
問題は、ターゲットのService UUIDを持ったデバイスを検索するところです。
ちゃんとService UUIDが一致していることを確認しておりますし、一見問題なさそうに見えるのですが、このままだとAndroid側とペリフェラルの接続が保証できません。Bluetooth LEの機器が混在する環境の中では、ScanFilterを用いましょう。
ScanFilterの使い方
冒頭でもお話した通り、大枠は先に貼ったリンクをご参照下さい。
ここでは、フィルターが必要な箇所のみ記述いたします。
mBleScanner = mBleAdapter.getBluetoothLeScanner(); ScanFilter scanFilter = new ScanFilter.Builder().setServiceUuid(ParcelUuid.fromString(SERVICE_UUID)).build(); ArrayList scanFilterList = new ArrayList(); scanFilterList.add(scanFilter); ScanSettings scanSettings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_BALANCED).build(); mBleScanner.startScan( scanFilterList, scanSettings, new ScanCallback() { .... });
以上です。めっちゃ簡単です。
SERVICE_UUIDは先に文字列として定義しておいて下さい。
今回はUUIDで指定しましたが、他にも色々なバリエーションがあります。
詳しくは公式ドキュメントをご確認ください。
https://developer.android.com/reference/android/bluetooth/le/ScanFilter.Builder.html
Yoshio Yanagi
最新記事 by Yoshio Yanagi (全て見る)
- VCCW + Ubuntu16にPHP5.6をインストールして使う - 2018年3月20日
- 既存のHeroku appからpipelineを作成し、CLIからStagingとProductionをいじれるようにする - 2017年5月24日
- お手伝いいただけるソフトウェアエンジニア募集中! - 2017年5月22日
この記事へのコメントはありません。