I'm looking for guidance and suggestions on what is the best way to design a system that will be aimed at people spending a long time, e.g., all day, in a large store, and wanting to know what parts they visit. Primarily targeting an Android app at this stage.
One way would be to assign all the beacons the same UUID and major number, create a region and start a background service to monitor it. Then you onEnteredRegion() and onExitedRegion() when the person enters/exits. Is that all you get? Or does onEnteredRegion() get called multiple times as the mix of beacons detected changes? If not, how do you get further information as they move about? Use onEnteredRegion() to launch a foreground app for ranging beacons, and working out from proximity where the person is?
Another way would be to define multiple regions, one for each department say. This would require BeaconManager to simultaneously monitor multiple regions. Is this possible? Then presumably the first argument to onEnteredRegion() and onExitedRegion() would let you work out where the person is.
1) Yes, you can define multiple regions and monitor or range them.
2) First option looks good. They share the same UUID. Major values can differentiate floors and minor sections on the floor. You will get called on entered region once per entry to that region. If you have multiple regions, each one will get separate on enter region event.
What I would like is information on any limits there are. For example, what is the maximum number of regions that you can simultaneously monitor with the Android SDK? I read somewhere, but haven't verified, that on iOS you are restricted to at most 20 regions. Can you do ranging from a background service?
For Android there is no such a limit.
Ranging can be done from background as long you invoke it from object that lives in background (can be an application object or your background service).