AltBeaconの実装方法#Beacon情報の取得、他

More than 3 years have passed since last update.


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を使用したアプリケーションではかなり便利に使用することができると思います。