Started using the new iBeacon class

This commit is contained in:
Alexandros Schillings
2014-03-16 23:13:23 +00:00
parent 3f333df497
commit bd57a59d5a
2 changed files with 73 additions and 8 deletions
@@ -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();
}
}
@@ -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);