Added proximity descriptor
This commit is contained in:
1 parent
8c03f29c32
commit
f08a561e7e
3 files changed
+48
-15
No files matched your search
@@ -66,7 +66,7 @@ public final class IBeaconManufacturerData {
|
|||||||
mUUID = calculateUUIDString(Arrays.copyOfRange(mData, 4, 20));
|
mUUID = calculateUUIDString(Arrays.copyOfRange(mData, 4, 20));
|
||||||
mMajor = ByteUtils.getIntFrom2ByteArray(Arrays.copyOfRange(mData, 20, 22));
|
mMajor = ByteUtils.getIntFrom2ByteArray(Arrays.copyOfRange(mData, 20, 22));
|
||||||
mMinor = ByteUtils.getIntFrom2ByteArray(Arrays.copyOfRange(mData, 22, 24));
|
mMinor = ByteUtils.getIntFrom2ByteArray(Arrays.copyOfRange(mData, 22, 24));
|
||||||
mCalibratedTxPower = ByteUtils.getIntFromByte(data[24]);
|
mCalibratedTxPower = data[24];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ public final class IBeaconManufacturerData {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getAccuracy(int rssi){
|
public double getAccuracy(double rssi){
|
||||||
return calculateAccuracy(mCalibratedTxPower, rssi);
|
return calculateAccuracy(mCalibratedTxPower, rssi);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,6 +99,22 @@ public final class IBeaconManufacturerData {
|
|||||||
return mCompanyIdentidier;
|
return mCompanyIdentidier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDistanceDescriptor(double accuracy){
|
||||||
|
if(accuracy < 0){
|
||||||
|
return "WTF";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(accuracy < 0.5){
|
||||||
|
return "IMMEDIATE";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(accuracy < 3.0){
|
||||||
|
return "NEAR";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "FAR";
|
||||||
|
}
|
||||||
|
|
||||||
public int getIBeaconAdvertisement(){
|
public int getIBeaconAdvertisement(){
|
||||||
return mIBeaconAdvertisment;
|
return mIBeaconAdvertisment;
|
||||||
}
|
}
|
||||||
@@ -116,7 +132,7 @@ public final class IBeaconManufacturerData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Code taken from: http://stackoverflow.com/questions/20416218/understanding-ibeacon-distancing
|
// Code taken from: http://stackoverflow.com/questions/20416218/understanding-ibeacon-distancing
|
||||||
protected static double calculateAccuracy(int txPower, double rssi) {
|
private static double calculateAccuracy(int txPower, double rssi) {
|
||||||
if (rssi == 0) {
|
if (rssi == 0) {
|
||||||
return -1.0; // if we cannot determine accuracy, return -1.
|
return -1.0; // if we cannot determine accuracy, return -1.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:text="@string/label_mac"
|
android:text="@string/label_mac"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/device_address"
|
android:id="@+id/device_address"
|
||||||
@@ -60,9 +61,11 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:text="@string/label_rssi"
|
android:text="@string/label_rssi"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/device_rssi"
|
android:id="@+id/device_rssi"
|
||||||
@@ -83,7 +86,8 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:text="@string/label_uuid"
|
android:text="@string/label_uuid"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/ibeacon_uuid"
|
android:id="@+id/ibeacon_uuid"
|
||||||
@@ -98,7 +102,8 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:text="@string/label_major"
|
android:text="@string/label_major"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/ibeacon_major"
|
android:id="@+id/ibeacon_major"
|
||||||
@@ -110,9 +115,11 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:text="@string/label_minor"
|
android:text="@string/label_minor"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/ibeacon_minor"
|
android:id="@+id/ibeacon_minor"
|
||||||
@@ -126,7 +133,8 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:text="@string/label_tx_power"
|
android:text="@string/label_tx_power"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/ibeacon_tx_power"
|
android:id="@+id/ibeacon_tx_power"
|
||||||
@@ -138,9 +146,11 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:text="@string/label_distance"
|
android:text="@string/label_distance"
|
||||||
android:textSize="12sp" />
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/ibeacon_distance"
|
android:id="@+id/ibeacon_distance"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package uk.co.alt236.btlescan.adapters;
|
package uk.co.alt236.btlescan.adapters;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -14,8 +15,10 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
// Adapter for holding devices found through scanning.
|
// Adapter for holding devices found through scanning.
|
||||||
public class LeDeviceListAdapter extends BaseAdapter {
|
public class LeDeviceListAdapter extends BaseAdapter {
|
||||||
|
private static final DecimalFormat DOUBLE_TWO_DIGIT_ACCURACY = new DecimalFormat("#.##");
|
||||||
|
|
||||||
private final List<BluetoothLeDevice> mLeDevices;
|
private final List<BluetoothLeDevice> mLeDevices;
|
||||||
private final LayoutInflater mInflator;
|
private final LayoutInflater mInflator;
|
||||||
|
|
||||||
@@ -81,6 +84,7 @@ import android.widget.TextView;
|
|||||||
|
|
||||||
final BluetoothLeDevice device = mLeDevices.get(i);
|
final BluetoothLeDevice device = mLeDevices.get(i);
|
||||||
final String deviceName = device.getName();
|
final String deviceName = device.getName();
|
||||||
|
final double rssi = device.getRssi();
|
||||||
|
|
||||||
if (deviceName != null && deviceName.length() > 0){
|
if (deviceName != null && deviceName.length() > 0){
|
||||||
viewHolder.deviceName.setText(deviceName);
|
viewHolder.deviceName.setText(deviceName);
|
||||||
@@ -90,20 +94,23 @@ import android.widget.TextView;
|
|||||||
|
|
||||||
if (IBeaconUtils.isThisAnIBeacon(device)){
|
if (IBeaconUtils.isThisAnIBeacon(device)){
|
||||||
final IBeaconManufacturerData data = new IBeaconManufacturerData(device);
|
final IBeaconManufacturerData data = new IBeaconManufacturerData(device);
|
||||||
|
final double accuracy = data.getAccuracy(rssi);
|
||||||
|
|
||||||
viewHolder.deviceIcon.setImageResource(R.drawable.ic_device_ibeacon);
|
viewHolder.deviceIcon.setImageResource(R.drawable.ic_device_ibeacon);
|
||||||
viewHolder.ibeaconSection.setVisibility(View.VISIBLE);
|
viewHolder.ibeaconSection.setVisibility(View.VISIBLE);
|
||||||
viewHolder.ibeaconMajor.setText(String.valueOf(data.getMajor()));
|
viewHolder.ibeaconMajor.setText(String.valueOf(data.getMajor()));
|
||||||
viewHolder.ibeaconMinor.setText(String.valueOf(data.getMinor()));
|
viewHolder.ibeaconMinor.setText(String.valueOf(data.getMinor()));
|
||||||
viewHolder.ibeaconTxPower.setText(String.valueOf(data.getCalibratedTxPower()));
|
viewHolder.ibeaconTxPower.setText(String.valueOf(data.getCalibratedTxPower()));
|
||||||
viewHolder.ibeaconUUID.setText(data.getUUID());
|
viewHolder.ibeaconUUID.setText(data.getUUID());
|
||||||
viewHolder.ibeaconDistance.setText(String.valueOf(data.getAccuracy(device.getRssi())));
|
viewHolder.ibeaconDistance.setText(
|
||||||
|
DOUBLE_TWO_DIGIT_ACCURACY.format(accuracy) + "m " + data.getDistanceDescriptor(accuracy));
|
||||||
} else {
|
} else {
|
||||||
viewHolder.deviceIcon.setImageResource(R.drawable.ic_bluetooth);
|
viewHolder.deviceIcon.setImageResource(R.drawable.ic_bluetooth);
|
||||||
viewHolder.ibeaconSection.setVisibility(View.GONE);
|
viewHolder.ibeaconSection.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
viewHolder.deviceAddress.setText(device.getAddress());
|
viewHolder.deviceAddress.setText(device.getAddress());
|
||||||
viewHolder.deviceRssi.setText(String.valueOf(device.getRssi()) + "db");
|
viewHolder.deviceRssi.setText(String.valueOf(rssi) + "db");
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,4 +127,4 @@ import android.widget.TextView;
|
|||||||
ImageView deviceIcon;
|
ImageView deviceIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user