2年前、BLE ビーコンとAndroid端末を使ってある場所への入退場を管理しようと試みました。
BLEビーコンはBluetooth Low Energy という電力消費を極力抑えたBluetoothの規格の電波発信機のことですね、簡単に言うと。下のサイトにわかりやすく解説載ってます。
本当は入口付近にビーコンを置いてビーコンとAndroid端末との距離に応じてDB上の入退場ステータスを更新って感じにしたかったですが、結構距離判定の調整が難しく、エリア全域をBLEビーコン電波圏内とし、電波圏ないから出たら退場処理をするとした方が高い精度が得られました。
私が取り組んでるときはそこそこ盛り上がりを見せてて、GoogleからEddyStoneが発表され、アプリなしでURLを送信できるとか1部で話題に上がってました。
紹介記事も多くは上にリンク貼っている記事も層ですが、2015年がピークみたいです(ほぼ出た直後)。
確かにたまに目にしますが、あんまり進歩していないというか、やはり私が体験したように電波の制御に苦しめられるからですかね…
当時、AltBeaconというライブラリ使ってました。
AltBeacon - The Open Proximity Beacon
MySQL JDBCドライバ入れて、Android端末からローカルネットワーク内にいるDBを直接更新するってプログラムで検証してました(セキュリティ的にありえないです笑)。
private static final String URL = "jdbc:mysql://192.168.1.13:3306/test"; private static final String USER = "root"; private static final String PASS = ""; (略) @Override public void didDetermineStateForRegion(int i, Region region) { // 領域への侵入/退出のステータスが変化したときに実行 Log.d(TAG, "didDetermineStateForRegion"); try { //Data Base へ接続 Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection(URL, USER, PASS); //Statement を作成 Statement stmt = con.createStatement(); //SQL 文を作成.ログイン状況を反転させる. String sql = " UPDATE memberlist SET in/out = ~in/out, time = now() WHERE accont = test "; //Update 文を実行 int num = stmt.executeUpdate(sql); //接続を閉じる stmt.close(); con.close(); } catch(Exception e) { e.printStackTrace(); } }
このやり方、普通じゃないのでご注意を。