- Fixes problem when not initializing SDK caused problems with ranging & monitoring.
-
This release brings Secure UUID – a security mechanism to protect your beacons from spoofing (where someone tries to ‘impersonate’ your beacons, by broadcasting the same UUID, Major and Minor). Using Secure UUID, the UUID, Major and Minor values that your beacon broadcasts will change unpredictably over time. The only way to resolve the values we generate to a particular beacon is via authorized access to Estimote Cloud.
-
You can enable Secure UUID via Estimote app from Google Play or via SDK
connection = new BeaconConnection(...); connection.edit().set(connection.secureUUID(), true).commit(...);
-
Ranging and region monitoring works transparently with Secure UUID enabled beacons. All you need is:
-
Make sure you have initialised SDK with your App ID & App Token.
// App ID & App Token can be taken from App section of Estimote Cloud. EstimoteSDK.initialize(applicationContext, appId, appToken);
-
Use
SecureRegion
instead ofRegion
when starting ranging or monitoring.// Initialise BeaconManager as before. // Find all *your* Secure UUID beacons in the vicinity. beaconManager.startRanging(new SecureRegion(“regionId”, null, null, null)); // Remember that you can also range for other regions as well. beaconManager.startRanging(new Region("otherRegion", null, null, null);
-
-
Breaking changes:
-
BeaconManager
methods for ranging & monitoring (startRanging
,stopRanging
,startMonitoring
,stopMonitoring
) no longer throwsRemoteException
. We heard that it caused lots of boilerplate code. We agree and removed it. -
Formatting MAC address was always pain (
aabbccddeeff
orAA:BB:CC:DD:EE:FF
?). That's why we removed allString
representation of MAC address and introducedMacAddress
class. -
For the same reason we removed all usages of
String
representation UUID and used Java'sjava.util.UUID
class instead.
- Finally support for built-in sensors: motion and temperature.
- Motion sensor readout with notifications. Note that you need to make sure it is enabled (separate property do enable/disable motion) sensor.
connection = new BeaconConnection(...);
// Make sure to enable motion sensor first.
connection.edit().set(connection.motionDetectionEnabled(), true).commit(...callback...);
connection.setMotionListener(new Property.Callback<MotionState>() {
@Override public void onValueReceived(final MotionState value) {
// Motion state in value argument.
}
@Override public void onFailure() {
// Error handling.
}
});
- Temperature sensor readout and calibration (two separate properies added to BeaconConnection).
// Temperature calibration (see also docs for BeaconConnection#temperatureCalibration()).
connection.edit().set(connection.temperatureCalibration(), 21).commit(...);
// If you want to measure temperature from beacon on demand.
connection.temperature().getAsync(new Property.Callback<Float>() {
@Override public void onValueReceived(final Float value) {
// updateTemperatureValue(value);
}
@Override public void onFailure() {
// Error handling.
}
});
Bug fixes:
- Negative temperature is properly interpreted in EddystoneTelemetry packet.
- BeaconManager crash when there are Eddystone beacons with bad packet.
Breaking changes
BeaconConnection.ConnectionCallback
has been changed to indicate that that your access to beacon had been authorised (ConnectionCallback#onAuthorized(BeaconInfo)
).
- Finally Estimote SDK is available on Maven Central (
com.estimote:sdk:0.8.7@aar
).
- Authentication to beacon is more robust than ever (requires updating beacon to firmware 3.2.0).
- Security improvements in the beacon authorization mechanism.
- Beacon update is more stable.
- This is mainly a bugfix release.
- Fixed (Estimote/Android-Fleet-Management-SDK#109): Documentation Bug.
- Fixed (Estimote/Android-Fleet-Management-SDK#117): Crash after update to 0.8 version.
- SDK demos are now using Material Design (h/t @RingoMckraken).
- Small fixes for Eddystone protocol.
- Say hello to Eddystone - an open protocol BLE protocol from Google.
- Estimote Beacons can broadcast Eddystone protocol.
- In order to start playing with Eddystone you need to update firmware of your existing Estimote beacons to
3.1.1
. Easiest way is through Estimote app on Google Play. Than you can change broadcasting scheme on your beacon to Eddystone-URL or Eddystone-UID. - New in SDK:
- find nearby Eddystone beacons (
BeaconManager#startEddystoneScanning
) - configure Eddystone related properties:
- URL property of
Eddystone-URL
(seeBeaconConnection#eddystoneUrl
) - namespace & instance properties of
Eddystone-UID
(seeBeaconConnection#eddystoneNamepsace
,BeaconConnection#eddystoneInstance
)
- URL property of
- configure broadcasting scheme of beacon to
Estimote Default
,Eddystone-UID
orEddystone-URL
(seeBeaconConnection#broadcastingScheme
)
- find nearby Eddystone beacons (
- SDK Examples have been updated to showcase Eddystone support.
- Initial support for nearables. You can discover nearby nearables via
BeaconManager.startNearableDiscovery()
. With nearbles you can read temperature, motion, orientation without need to connect to it. Directly from discoveredNearable
class. - You can change basic & smart power mode in your beacon via
BeaconConnection
. Read more about power modes. android.hardware.bluetooth_le
feature is no longer required- You can also change conditional broadcating in beacon (Flip To Sleep). It is great for development. Read more about Flip To Sleep.
- Breaking changes (1.0 is approaching, bear with us):
- most of
BeaconConnection
s write* methods are gone, they are replaced with more appropriateProperty
class
- most of
// Before
connection.writeMajor(newMajor, callback);
connection.writeMinor(newMinor, callback);
// After: reading
connection.minor().get()
connection.major().get()
// After: writing in batch
connection.edit()
.set(connection.proximityUuid(), newUuid)
.set(connection.major(), newMajor)
.set(connection.minor(), newMinor)
.commit(callback);
- Fixed authentication issues (#111).
- You can update update firmware in Estimote beacons from the SDK. There are several ways to do it:
- Use
BeaconOta
class to perform firmware update on selected beacon. - Use
BeaconConnection#updateBeacon
which triggers update on the beacon. See updated demos to see how it works. - You can also use Estimote app from Play Store to do that.
- Use
- Estimote SDK now includes also
android.permission.ACCESS_NETWORK_STATE
permission to determine internet connectivity. - Breaking changes (please bear with us, we are approaching stable 1.0 release):
BeaconConnection
'sConnectionCallback#onAuthenticated
method does not returnBeaconCharacteristics
object any more. You can read them directly onBeaconConnection
object.- For example read reading broadcasting power is just
connection.getBroadcastingPower()
.
- From now Estimote SDK for Android is distributed as AAR archive rather than jar. That means that you do not need to change your
AndroidManifest.xml
. SDK'sAndroidManifest.xml
will be merged with your application'sAndroidManifest.xml
. See installation guide how to add library to your project. - Welcome back! We have added support for Estimote Cloud. You can access it via
EstimoteCloud
class. Remember first to provide your App ID & App Token from App section of Estimote Cloud viaEstimoteSDK#initialize
method. - From now all connections to beacons needs to be authorized. If a beacon is not registered to your account, you will not be able to connect to it.
- Estimote SDK's
AndroidManifest.xml
usesBLUETOOTH
,BLUETOOTH_ADMIN
andINTERNET
permissions. - Yes, there is single point of initialisation of the SDK.
// App ID & App Token can be taken from App section of Estimote Cloud.
EstimoteSDK.initialize(applicationContext, appId, appToken);
// Optional, debug logging.
EstimoteSDK.enableDebugLogging(true);
-
All exceptions within the SDK has been unified and exposed in
com.estimote.sdk.exception
package. -
That means some breaking changes:
L
class is no longer available, in order to turn on debug logging useEstimoteSDK
class.BeaconConnection.ConnectionCallback
&BeaconConnection.WriteCallback
methods have been changed to contain apropriate exception when happens.
- Fixes Estimote/Android-Fleet-Management-SDK#59: compatibilty with Android L
- Fixes Estimote/Android-Fleet-Management-SDK#55: it is safe to use library from remote process
- CAN BREAK BUILD: MonitoringListener returns list of beacons the triggered enter region event (Estimote/Android-Fleet-Management-SDK#18)
- Better messaging when BeaconManager cannot start service to scan beacons (Estimote/Android-Fleet-Management-SDK#25)
- Fixed bug in SDK when other beacons are around (Estimote/Android-Fleet-Management-SDK#27)
- Introducing ability to change beacon's UUID, major, minor, broadcasting power, advertising interval (see BeaconConnection class).
- Dropping Guava dependency.
- Fixes bug when simulated beacons were not seen even when using Estimote's proximity UUID.
- Background monitoring is more robust and using AlarmService to invoke scanning.
- Default values for background monitoring were changed. Scanning is performed for 5 seconds and then service sleeps for 25 seconds. Those values can be changed with BeaconManager#setBackgroundScanPeriod.
- Beacons reported in RangingListener#onBeaconsDiscovered are sorted by accuracy (estimated distance between device and beacon).
- Bug fixes.
- IMPORTANT: package changes BeaconService is now in
com.estimote.sdk.service service
. You need to update yourAndroidManifest.xml
service definition tocom.estimote.sdk.service.BeaconService
. - Support for monitoring regions in BeaconManager.
- Region class: it is mandatory to provide region id in its constructor. This matches CLRegion/ESTBeaconRegion from iOS.
- Beacon, Region classes now follow Java bean conventions (that is getXXX for accessing properties).
- Debug logging is disabled by default. You can enable it via
com.estimote.sdk.utils.L#enableDebugLogging(boolean)
.
- Initial version.