LoginSignup
36
47

More than 5 years have passed since last update.

AltBeaconの実装方法#領域監視

Last updated at Posted at 2015-07-28

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情報の取得、他)
36
47
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
36
47