LoginSignup
16
21

More than 5 years have passed since last update.

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

Posted at

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

16
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
21