#Beaconから取得できる情報
それでは前回(AltBeaconの実装方法#領域監視)の続きになります。
初期設定は前回に記述しているので、そちらも参考にして下さい。
AltBeaconでは領域監視だけでなく、Beaconから発信されているデータを取得することもできます。主なデータは以下の通りです。
【取得データ】
・ビーコン名
設定されたビーコン名
・Macアドレス
ビーコンに設定されているユニークなID(変更不可)
・UUID値
所属するグループを識別するための値で、一意のIDを設定する。
・Major値
ビーコンそのものを識別するID、Minor値とセットで一意のIDを設定する。
・Minor値
ビーコンそのものを識別するID、Major値とセットで一意のIDを設定する。
・距離
検出しているビーコンと端末との距離(メートル単位)
・RSSI値
検知したビーコンの電波強度。端末とビーコンの距離に関係し、一般的に電波強度が高いほどビーコンとの距離が近いことを表す。
他にも取得できるデータは存在しますが、省略します。
#Beaconのレンジング設定
それでは実装に入ります。
実装は前回の続きからになります。
前回は領域監視の設定まで実装しました。
@Override
public void onBeaconServiceConnect() {
mBeaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
// 領域への入場を検知
}
@Override
public void didExitRegion(Region region) {
// 領域からの退場を検知
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
// 領域への入退場のステータス変化を検知
}
});
}
ビーコンの情報を取得するにはBeaconManagerからレンジングを行う必要があります。
例では領域に入場したタイミングでレンジングを開始します。
Region mRegion = new Region("一意のユニークID", uuid, major, minor);
@Override
public void didEnterRegion(Region region) {
// 領域への入場を検知
// レンジングの開始
mBeaconManager.startRangingBeaconsInRegion(mRegion);
}
@Override
public void didExitRegion(Region region) {
// 領域からの退場を検知
// レンジングの停止
mBeaconManager.stopRangingBeaconsInRegion(mRegion);
}
※Regionに設定する引数は、任意のビーコンを識別するために使用します。
使用しない場合はnullを設定します。
#Beacon情報の取得
レンジングを開始したら通知を受け取る設定を行います。
通知はBeaconManager#setRangeNotifierで受け取り、引数にリスナーを設定します。
mBeaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
// 検出したビーコンの情報を全部Logに書き出す
for(Beacon beacon : beacons) {
// ログの出力
Log.d("Beacon", "UUID:" + beacon.getId1() + ", major:" + beacon.getId2()
+ ", minor:" + beacon.getId3() + ", Distance:" + beacon.getDistance()
+ ",RSSI" + beacon.getRssi());
}
}
});
検出したBeaconクラスの値から各種データを取得することができます。
※Beacon#getId1は"uuid"、getId2は"major"、getId3は"minor"です。
#まとめ
これでAndroidでもiBeaconと同等の機能を実装することができました。
出来ることは限られていますがBLEを使用したアプリケーションではかなり便利に使用することができると思います。