スマホとBeacon(iBeacon) その2
前回のつづきです。
今回はAndroidでビーコンを受信する方法を、サンプルソースコード交えてご紹介します。
画像に写っている2つ(白い円型と黒い四角型)がビーコン機器になります。
白い方は、ボタン電池で約1年稼動するタイプ
黒い方は、単三電池で約10年稼動するタイプ
※稼動年数はメーカー発表のスペック上の数値です。
サイズ比較のために単三電池をおいてますので、大体の大きさはおわかりいただけるかと思います。
では、Androidのビーコン受信の方法ですが、単純に受信するだけであれば非常に簡単です。
まずはプロジェクトを作成します。
この時注意するのは、ビーコンを受信するためにはBLEが必須ですので
APIレベルをOS4.3以上にしておきましょう。
※実機は、OS4.3でもハードウェアでBLEに対応していないとダメなので、対応している端末を使いましょう。
次に、マニフェストファイルにBluetoothを使用するためのパーミッションの設定をします。
<uses-permission android:name=”android.permission.BLUETOOTH”/>
<uses-permission android:name=”android.permission.BLUETOOTH_ADMIN”/>
あとは、BLEの受信を行うだけです。
BluetoothAdapter をpabulicで定義しておきましょう。
public BluetoothAdapter mBluetoothAdapter;
onCreate時にシステムからBluetoothManagerを取得して先ほど宣言したBluetoothAdapterにgetAdapter()しておきます。
BluetoothManager bluetoothManager = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
次にビーコン(デバイス)のスキャンです。
そのままCreateの流れで行っても良いですし、何か適当にボタン設けてそのイベントでしてしまっても良いです。
mBluetoothAdapter.startLeScan(mLeScanCallback);
スキャンが開始されてビーコンが見つかるとBluetoothAdapterのコールバックが呼ばれますので
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback(){
@Override
public void onLeScan(BluetoothDevice device, int resint, byte[] scanByte) {
//scanByteの中身をパース
}
};
scanByteの中にビーコンのUUIDやら入っていますので、
パースして中身を解析すればスキャンした結果を得る事が出来ますので
ビーコン1がスキャンされた場合、2がスキャンされた場合等に応じて処理を振り分ければ色々出来てしまいます。
この紹介した方法は、あくまで単純にビーコンを受信するだけの物で、実際には
距離、複数回検出の制御等々、アプリとして成立させるためには色々実装が必要になります。
また、ビーコンメーカーから専用のSDKなんかも公開されていたりするので購入された際はそちら使った方が良いかもしれません。
月曜担当SH
SH at 2014年07月07日 10:28:16