I am student at university and I have to make a prototype app which may be used in the future at a museum.
The requirements for the app is that as a user visiting a museum he should get content relevant to the exhibit he is closer. Lets say that each exhibit has its own beacon which is broadcasting eddystone protocol.
I am a bit confused about what eddystone can or can’t do compared to iBeacon.
I have some questions like if I had to declare a Region ,depend only on beacon’s signal strength in order to know if I 'm closer to that beacon etc. I would be grateful if you could tell me the steps needed to develop an app like this.
Thanks in advance and sorry for the long post!
Eddystone is pretty much the same as iBeacon in terms of what you can do with it. And when it comes to how to detect Eddystone beacons instead of iBeacons with Estimote SDKs, here’s a short “quick start” guide:
So for example, on Android, you’d simply start scanning for Eddystones with
beaconManager.startEddystoneScanning(), and then your
EddystoneListener will keep getting a list of
Eddystone objects that represent the discovered devices. You can take their identifier, cross-reference it with your system (e.g., Eddystone with
instance “0BDB87539B67” == “Mona Lisa”), plus use the
Utils.computeAccuracy(eddystone) to find the closest beacon.
For a deeper dive, check out the Android SDK reference, e.g., this description of the
Thank you @heypiotr for your reply.
Another question now
Is it possible to have a timer each time a user come close to a beacon or multiple beacons?
I want to know how much time a user spent in a museum room.
Thanks in advance!
Sure! There’s nothing really beacon-specific here—just store a timestamp when the user enters the range of a beacon, and when they exit the range, compare that timestamp to current time to calculate how much time the user has spent in range.
// on enter
this.timestampOnEntered = System.currentTimeMillis();
// on exit
long difference = System.currentTimeMillis() - this.timestampOnEntered;
long differenceInMinutes = difference / 1000 / 60;
// 1000 milliseconds in a second, 60 seconds in a minute