From bd57a59d5a3cdf3dfa31c6cb03ec824a651975d0 Mon Sep 17 00:00:00 2001 From: Alexandros Schillings Date: Sun, 16 Mar 2014 23:13:23 +0000 Subject: [PATCH] Started using the new iBeacon class --- .../bluetoothlelib/device/IBeaconDevice.java | 62 +++++++++++++++++++ .../adapters/LeDeviceListAdapter.java | 19 +++--- 2 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 library/src/uk/co/alt236/bluetoothlelib/device/IBeaconDevice.java diff --git a/library/src/uk/co/alt236/bluetoothlelib/device/IBeaconDevice.java b/library/src/uk/co/alt236/bluetoothlelib/device/IBeaconDevice.java new file mode 100644 index 0000000..4717c3e --- /dev/null +++ b/library/src/uk/co/alt236/bluetoothlelib/device/IBeaconDevice.java @@ -0,0 +1,62 @@ +package uk.co.alt236.bluetoothlelib.device; + +import uk.co.alt236.bluetoothlelib.device.mfdata.IBeaconManufacturerData; +import uk.co.alt236.bluetoothlelib.util.IBeaconUtils; +import uk.co.alt236.bluetoothlelib.util.IBeaconUtils.IBeaconDistanceDescriptor; +import android.bluetooth.BluetoothDevice; +import android.os.Parcel; + +public class IBeaconDevice extends BluetoothLeDevice{ + private final IBeaconManufacturerData mIBeaconData; + + public IBeaconDevice(BluetoothDevice device, int rssi, byte[] scanRecord) { + super(device, rssi, scanRecord, 0); + mIBeaconData = new IBeaconManufacturerData(this); + } + + public IBeaconDevice(BluetoothDevice device, int rssi, byte[] scanRecord, long timestamp){ + super(device, rssi, scanRecord, timestamp); + mIBeaconData = new IBeaconManufacturerData(this); + } + + public IBeaconDevice(BluetoothLeDevice device){ + this(device.getDevice(), device.getRssi(), device.getScanRecord(), device.getTimestamp()); + } + + private IBeaconDevice(Parcel in) { + super(in); + mIBeaconData = new IBeaconManufacturerData(this); + } + + public double getAccuracy(){ + return IBeaconUtils.calculateAccuracy(getCalibratedTxPower(), getRssi()); + } + + public int getCalibratedTxPower(){ + return getIBeaconData().getCalibratedTxPower(); + } + + public int getCompanyIdentifier(){ + return getIBeaconData().getCompanyIdentifier(); + } + + public IBeaconDistanceDescriptor getDistanceDescriptor(){ + return IBeaconUtils.getDistanceDescriptor(getAccuracy()); + } + + public IBeaconManufacturerData getIBeaconData(){ + return mIBeaconData; + } + + public int getMajor(){ + return getIBeaconData().getMajor(); + } + + public int getMinor(){ + return getIBeaconData().getMinor(); + } + + public String getUUID(){ + return getIBeaconData().getUUID(); + } +} diff --git a/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java b/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java index 282be31..47b6614 100644 --- a/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java +++ b/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java @@ -5,7 +5,7 @@ import java.util.ArrayList; import java.util.List; import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; -import uk.co.alt236.bluetoothlelib.device.mfdata.IBeaconManufacturerData; +import uk.co.alt236.bluetoothlelib.device.IBeaconDevice; import uk.co.alt236.bluetoothlelib.util.IBeaconUtils; import uk.co.alt236.btlescan.R; import android.app.Activity; @@ -96,17 +96,20 @@ public class LeDeviceListAdapter extends BaseAdapter { } if (IBeaconUtils.isThisAnIBeacon(device)){ - final IBeaconManufacturerData data = new IBeaconManufacturerData(device); - final double accuracy = data.getAccuracy(rssi); + // Alternatively you can just call + // IBeaconManufacturerData data = new IBeaconManufacturerData(device); + + final IBeaconDevice iBeacon = new IBeaconDevice(device); + final double accuracy = iBeacon.getAccuracy(); viewHolder.deviceIcon.setImageResource(R.drawable.ic_device_ibeacon); viewHolder.ibeaconSection.setVisibility(View.VISIBLE); - viewHolder.ibeaconMajor.setText(String.valueOf(data.getMajor())); - viewHolder.ibeaconMinor.setText(String.valueOf(data.getMinor())); - viewHolder.ibeaconTxPower.setText(String.valueOf(data.getCalibratedTxPower())); - viewHolder.ibeaconUUID.setText(data.getUUID()); + viewHolder.ibeaconMajor.setText(String.valueOf(iBeacon.getMajor())); + viewHolder.ibeaconMinor.setText(String.valueOf(iBeacon.getMinor())); + viewHolder.ibeaconTxPower.setText(String.valueOf(iBeacon.getCalibratedTxPower())); + viewHolder.ibeaconUUID.setText(iBeacon.getUUID()); viewHolder.ibeaconDistance.setText(DOUBLE_TWO_DIGIT_ACCURACY.format(accuracy) + "m"); - viewHolder.ibeaconDistanceDescriptor.setText(data.getDistanceDescriptor(accuracy)); + viewHolder.ibeaconDistanceDescriptor.setText(iBeacon.getDistanceDescriptor().toString()); } else { viewHolder.deviceIcon.setImageResource(R.drawable.ic_bluetooth); viewHolder.ibeaconSection.setVisibility(View.GONE);