From 27c06208e1f6fce64476ca1c8e3ac4f21e159887 Mon Sep 17 00:00:00 2001 From: Alexandros Schillings Date: Fri, 14 Mar 2014 17:30:30 +0000 Subject: [PATCH] Fixed UUID calculation --- .../mfdata/IBeaconManufacturerData.java | 26 ++++++++++++++++--- .../adapters/LeDeviceListAdapter.java | 2 +- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/library/src/uk/co/alt236/bluetoothlelib/device/mfdata/IBeaconManufacturerData.java b/library/src/uk/co/alt236/bluetoothlelib/device/mfdata/IBeaconManufacturerData.java index 5a47783..399516f 100644 --- a/library/src/uk/co/alt236/bluetoothlelib/device/mfdata/IBeaconManufacturerData.java +++ b/library/src/uk/co/alt236/bluetoothlelib/device/mfdata/IBeaconManufacturerData.java @@ -50,7 +50,7 @@ public final class IBeaconManufacturerData { private final int mIBeaconAdvertisment; private final int mMajor; private final int mMinor; - private final UUID mUUID; + private final String mUUID; public IBeaconManufacturerData(BluetoothLeDevice device){ this(device.getAdRecordStore().getRecord(AdRecord.TYPE_MANUFACTURER_SPECIFIC_DATA).getData()); @@ -58,19 +58,37 @@ public final class IBeaconManufacturerData { public IBeaconManufacturerData(byte[] data){ mData = data; - Log.d("TAG", "~ Reading iBeacon Data: " + ByteUtils.byteArrayToHexString(data)); + //Log.d("TAG", "~ Reading iBeacon Data: " + ByteUtils.byteArrayToHexString(data)); mCompanyIdentidier = ByteUtils.getIntFrom2ByteArray( ByteUtils.invertArray( Arrays.copyOfRange(mData, 0, 2))); mIBeaconAdvertisment = ByteUtils.getIntFrom2ByteArray(Arrays.copyOfRange(mData, 2, 4)); - mUUID = UUID.nameUUIDFromBytes(Arrays.copyOfRange(mData, 4, 20)); + mUUID = calculateUUIDString(Arrays.copyOfRange(mData, 4, 20)); mMajor = ByteUtils.getIntFrom2ByteArray(Arrays.copyOfRange(mData, 20, 22)); mMinor = ByteUtils.getIntFrom2ByteArray(Arrays.copyOfRange(mData, 22, 24)); mCalibratedTxPower = ByteUtils.getIntFromByte(data[24]); } + + private String calculateUUIDString(final byte[] uuid){ + final StringBuffer sb = new StringBuffer(); + + for(int i = 0 ; i< uuid.length; i++){ + if(i == 4){sb.append('-');} + if(i == 6){sb.append('-');} + if(i == 8){sb.append('-');} + if(i == 10){sb.append('-');} + + sb.append( + Integer.toHexString(ByteUtils.getIntFromByte(uuid[i]))); + } + + + return sb.toString(); + } + public int getCalibratedTxPower(){ return mCalibratedTxPower; } @@ -91,7 +109,7 @@ public final class IBeaconManufacturerData { return mMinor; } - public UUID getUUID(){ + public String getUUID(){ return mUUID; } 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 51267d5..b8639f2 100644 --- a/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java +++ b/sample_app/src/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java @@ -95,7 +95,7 @@ import android.widget.TextView; 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().toString()); + viewHolder.ibeaconUUID.setText(data.getUUID()); } else { viewHolder.deviceIcon.setImageResource(R.drawable.ic_bluetooth); viewHolder.ibeaconSection.setVisibility(View.GONE);