public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { // アドバータイジングパケットのペイロードをパースする。 List<ADStructure> structures = ADPayloadParser.getInstance().parse(scanRecord); // アドバータイジングパケットに含まれる各 AD structure ごとに for (ADStructure structure : structures) { if (structure instanceof EddystoneUID) { // Eddystone UID EddystoneUID es = (EddystoneUID)structure; // ビーコン ID (= 名前空間 ID + インスタンス ID) // byte[] beaconId = es.getBeaconId(); String beaconId = es.getBeaconIdAsString(); // 名前空間 ID // byte[] namespaceId = es.getNamespaceId(); String namespaceId = es.getNamespaceIdAsString(); // インスタンス ID // byte[] instanceId = es.getInstanceId(); String instanceId = es.getInstanceIdAsString(); // Tx Power int power = es.getTxPower(); } else if (structure instanceof EddystoneURL) { // Eddystone URL EddystoneURL es = (EddystoneURL)structure; // URL URL url = es.getURL(); // Tx Power int power = es.getTxPower(); } else if (structure instanceof EddystoneTLM) { // Eddystone TLM EddystoneTLM es = (EddystoneTLM)structure; // TLM バージョン int version = es.getTLMVersion(); // 電圧 int voltage = es.getBatteryVoltage(); // 温度 float temperature = es.getBeaconTemperature(); // 電源 ON もしくはリブートからのアドバタイズパケット総数 long count = es.getAdvertisementCount(); // 電源 ON もしくはリブートからの経過時間 long time = es.getElapsedTime(); } else if (structure instanceof IBeacon) { // ついでに iBeacon も IBeacon iBeacon = (IBeacon)structure; // メジャー番号 int major = iBeacon.getMajor(); // マイナー番号 int minor = iBeacon.getMinor(); // Proximity UUID UUID uuid = iBeacon.getUUID(); // Tx Power int power = iBeacon.getPower(); } } }
nv-bluetooth を使うには、build.gradle の dependencies ブロックに次の行を追加すればよい。
compile 'com.neovisionaries:nv-bluetooth:1.7'
参考リンク
- nv-bluetooth
- nv-bluetooth の JavaDoc
- Eddystone
- Eddystone UID
- Eddystone URL
- Eddystone TLM
- Bluetooth: Specification Adopted Documents