This library allows for easy access to a Bluetooth LE device's Advertisement Records. It also offers:
This will only work on Android 4.3 (API Level 18).
Sample app available on the Play Store
There are two ways to use this library:
Type ant jar
at the root of the Library Project to produce a Jar file.
The library jar along with it's javadoc jar will be found in the dist
directory inside the library project.
You will need to provide your own local.properties
inside the library project.
In the onLeScan()
method of your BluetoothAdapter.LeScanCallback()
create a new BluetoothLeDevice with the given information.
For example:
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) { final BluetoothLeDevice deviceLe = new BluetoothLeDevice(device, rssi, scanRecord, System.currentTimeMillis()); runOnUiThread(new Runnable() { @Override public void run() { mDeviceStore.addDevice(deviceLe); mLeDeviceListAdapter.replaceData(mDeviceStore.getDeviceList()); } }); } };
Once you have created a device, you can access the following methods:
getAddress()
: Gets the MAC Address of the devicegetAdRecordStore()
: Gives access to a device's Ad RecordsgetDevice()
: Gives access to the standard BluetoothDevice objectgetFirstRssi()
: Retrieves the RSSI value which was used when the object was createdgetFirstTimestamp()
Retrieves the timestamp (in millis) which was used when the object was createdgetRssi()
Gets the current RSSI measurement (see note below).getScanRecord()
Retrieves the RAW scan record arraygetTimestamp()
Gets the timestamp of the last RSSI measurementgetRunningAverageRssi()
Retrieves the internally calculated running average RSSI value (see note below).Note: The Running Average RSSI is not updated automatically (i.e. the library does not monitor on its own in the background). To add another measurement, you need to call updateRssiReading(long timestamp, int rssiReading)
.
Once you've created a BluetoothLe device, you can access the AdRecord store via the leDevice.getAdRecordStore()
. Once you have the AdRecordStore you can use the following methods:
getRecord(int recordNo)
: Gets the AdRecord object corresponding to the recordNumber.getRecordDataAsString(int recordNo)
: Gets the AdRecord contents as a String (expect non printable characters in most cases).isRecordPresent(int recordNo)
: Checks to see if a record exists.Note: Record numbers are declared in the Bluetooth 4 spec which can be found here.
They are also declared as constants in AdRecord.java
.
You can check if a device is an iBeacon by using IBeaconUtils.isThisAnIBeacon(BluetootLeDevice device)
. Once you have confirmed that it is, you can create a new IBeaconDevice via the IBeaconDevice constructor.
An IBeaconDevice extends BluetoothLeDevice, so you still have access to the same methods as before. In addition you can do the following:
getAccuracy()
: Gets the estimated Accuracy of the reading in meters based on a simple running average calculationgetCalibratedTxPower()
: Gets the calibrated TX power of the iBeacon device as reportedgetCompanyIdentifier()
: Gets the iBeacon company identifier (this should always be 0x004C for Apple)getDistanceDescriptor()
: Gets the estimated Distance descriptor (an enum)getIBeaconData()
: Gets the raw IBeaconManufacturerData object.getUUID()
: Gets the device's UUIDgetMajor()
: Gets the device's Major valuegetMinor()
: Gets the device's Minor valueYou can also lookup values and convert them to human friendly strings:
BluetoothClassResolver.resolveDeviceClass(int btClass)
: Will try to resolve a Blueotooth Device classCompanyIdentifierResolver.getCompanyName(int companyId, String fallback)
: Will try to resolve a Company identifier to the company nameGattAttributeResolver.getAttributeName(String uuid, String fallback)
: Will try to convert a UUID to its name.Note: The data can be found as ODS (Open Office Spreadsheets) in the documents folder.
You will need the following permissions to access the Bluetooth Hardware
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
Author: Alexandros Schillings.
All logos are the property of their respective owners.
The code in this project is licensed under the Apache Software License 2.0.
Copyright (c) 2014 Alexandros Schillings.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )