Beaconアプリ開発記【その3 情報取得編】

開発部の上條です。
前回の開発記では AltBeacon の android-beacon-library を利用して領域監視を実装しました。これによって、Beaconの電波範囲内への入退場をAndroid端末で検知出来るようになりました。しかし、このままでは今回のアプリで表示させたいBeacon自体の情報は分からないままです。今回はBeacon自体の情報を取得するRangingという処理の実装をしていきます。
過去のアプリ開発記はこちらからご覧ください。
Beaconアプリ開発記【その1 開発準備編】
Beaconアプリ開発記【その2 領域監視編】

Ranging

まずは、前回編集したMainActivity.javaを確認しましょう。以下のコードによって前回実装した領域監視が可能です。

ここにBeaconの情報を取得するRangingの機能を追加実装していきます。領域監視の実装時に作成したonBeaconServiceConnect()メソッドに、以下の内容を追加しましょう。

このdidRangeBeaconsInRegion()メソッド内に処理を記述することで、Beaconの電波領域内に端末が存在する時の処理を設定することが可能です。前回同様、ひとまず取得したデータはログに出力させるように実装します。
なお、AltBeaconのライブラリで取得できる情報とそれに対応する変数は以下の通りです。

それぞれの情報について改めてご説明しておきましょう。
UUID・Major・Minorは前回の記事でも少しだけ出てきましたが、iBeaconの個体識別に用いられるIDです。これらの組み合わせによって特定のBeaconを識別することが可能になります。
RSSIとTxPowerはどちらも電波強度を示す指標でdBmという単位を用いて表現します。RSSIは端末が受信した電波の強度を、TxPowerはBeaconから1メートル離れた地点での電波強度(RSSI)を示しています。ただしgoogle社のEddystoneの場合は、Beaconが発信している電波出力の強度そのものをTxPowerとしています。
RSSIとTxPowerを用いることで、Beacon(発信側)とスマートフォン(受信側)との距離を算出することができます。
Rangingの処理も領域検知の時と同様にtry-catch文で実行開始の指示を出します。

また、Rangingの際も領域監視と同様にRegionの設定が必要です。今回は、前回の実装時に設定したRegionをそのまま利用し、検知した全てのiBeaconに関する情報を取得できるようにします。
ここまでコードを追記してプログラムを実行すると、以下のようなログが出力されます。

ご覧の通り、UUIDやmajor、minorといった値が表示されていることが確認できると思います。また、Regionの設定を全てのiBeaconにしているので検知したiBeaconの情報がどんどんログに出力されるはずです。これで受信したBeaconの電波からBeacon端末に関する情報を取得できるようになりました。

終わりに

今回でBeaconアプリのBLEを使った部分のシステム面は完成させることが出来ました。次回の記事でGUI関連の部分を実装し、アプリ完成としたいと思います。
Beaconアプリ開発記【その1 開発準備編】
Beaconアプリ開発記【その2 領域監視編】
Beaconアプリ開発記【その4 画面表示編】

関連記事

  1. 知識ゼロで Unity をはじめてみた【その3 -キューブの落下とバウ…

  2. Windows でも BLE を扱うことは可能か?〜できるかどうかやっ…

  3. Raspberry Pi CM4 のセットアップ

  4. Web でカメラを使おう – WebRTC (getUse…

  5. 知識ゼロで Unity をはじめてみた【その5 -Android 端末…

  6. 観光施設をガイドする音声アプリ「eGuide」で密集・密接せずに旅行を…