AltBeaconの実装方法#領域監視

More than 3 years have passed since last update.


AltBeaconとは

AltBeaconとは、AndroidでもiOSのiBeaconと同じような機能でBLEの信号を検出することができるようにするためのライブラリです。

BLEを使用するアプリにおいて、これまではiOSとAndroidでは検出方法が異なっていたためギャップが生じていましたが、このライブラリを使用することによりそのギャップを埋めることが出来ます。


iBeaconとは

http://smartphone-ec.net/ibeacon/system.html

AltBeaconサイト

http://altbeacon.org/



準備

1.ライブラリの導入

以下よりライブラリを取得し、任意のプロジェクトに導入してください。

https://github.com/AltBeacon/android-beacon-library

2.パーミッションの設定

Bluetoothを使用するため、マニフェストにて以下パーミッションを許可しなければなりません。


Permission

<uses-permission android:name="android.permission.BLUETOOTH"/>

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

任意ですが、対応していない機種にインストールされないようにuser-futureを設定することも重要です。


user-feature

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>



領域監視の実装

それでは実装段階に移りますが、まずは領域監視の実装に入ります。

領域監視とは端末がBeacon検知領域に入ったかどうかを監視するもので、エリアの入退場を検知することができます。

1.BluetoothManagerのインスタンス化

まずはBluetoothManagerをインスタンス化します。BluetoothManagerはBeacon情報を管理するもので、Beacon検知の開始や停止、監視対象の設定ができます。

@Override

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// インスタンス化
BeaconManager mBeaconManager = BeaconManager.getInstanceForApplication(this);

2.Parserの設定

AltBeaconのデフォルト設定ではiBeaconを対象としていないので、Parserを設定する必要があります。

String IBEACON_FORMAT = "m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24";

mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout(IBEACON_FORMAT));

3.Beaconサービスの接続と開始

Beaconサービスと接続します(今回はActivityにBeaconConsumerを実装しています)

public class MainActivity extends Activity implements BeaconConsumer {

@Override
public void onBeaconServiceConnect() {
}
}

BeaconManager#bind()でサービスを開始します。※停止はunbind()

@Override

protected void onResume() {
super.onResume();
mBeaconManager.bind(this); // サービスの開始
}

@Override
protected void onPause() {
super.onPause();
mBeaconManager.unbind(this); // サービスの停止
}

4.領域監視の開始

領域監視を開始するにはRegionの設定が必要です。

mRegion = new Region("任意のユニークID", null, null, null);

Regionの第一引数には識別するIDを設定します。

第二、三、四引数で監視対象を選定する設定します。

// uuidが"00000000-EE6E-2001-B000-005511DDAEGD"、

// major番号が"1"、minor番号が"9"のBeaconを監視する場合
Identifier uuid = Identifier.parse("00000000-EE6E-2001-B000-005511DDAEGD");
Identifier major = Identifier.parse("1");
Identifier minor = Identifier.parse("9");
mRegion = new Region("任意のユニークID", uuid, major, minor);

BeaconManager#startMonitoringBeaconsInRegion()でBeaconの監視を開始します。

@Override

public void onBeaconServiceConnect() {
try {
// ビーコン情報の監視を開始
mBeaconManager.startMonitoringBeaconsInRegion(mRegion);
} catch (RemoteException e) {
e.printStackTrace();
}
}

またBeaconManager#stopMonitoringBeaconsInRegion()で監視を停止します。

mBeaconManager.stopMonitoringBeaconsInRegion(mRegion);

5.領域監視の設定

サービスの開始により、領域監視の検知が開始されます。

検知情報を通知するため、領域監視の設定を行いましょう。

領域監視の通知を受け取るには、BeaconManager#setMonitorNotifier()を呼び出し、引数にMonitorNotifierというリスナーを設定します。

@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) {
// 領域への入退場のステータス変化を検知
}
});
}

各リスナーに検知後の処理を実装することで、検知を確認することができます。


まとめ

これでBeacon領域の入退場を検知することが出来たので、屋内への入退場を検知するアプリもこれで作ることができます。

しかしiBeaconの機能としてはまだまだ不十分です。

更なる機能の実装については次回に解説したいと思います。


次回(AltBeaconの実装方法#Beacon情報の取得、他)