The first thing I would say is that it is the first time I am using the beacons. I'm using the library AltBeacon
Currently I have several things working, for example, when I enter a region or when I leave it .. also get the distance to the beacon correctly. This works perfectly. I also get the UUID, the major and the minor .. but do not know if I'm doing it correctly.
This is my code:
public class Hello extends Activity implements BeaconConsumer {
protected static final String TAG = "readme";
private BeaconManager beaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hola);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
}
@Override
public void onBeaconServiceConnect() {
try {
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", Identifier.parse("MY_UUID"), Identifier.parse("1"), null));
} catch (RemoteException e) {
}
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away.");
Log.i(TAG, "Reading…"+"\n"+"proximityUuid:"+" "+ beacons.iterator().next().getId1()+"\n"+
"major:"+" "+beacons.iterator().next().getId2()+"\n"+
"minor:"+" "+beacons.iterator().next().getId3());}
}
});
beaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(Region region) {
Log.i(TAG, "I just saw an beacon for the first time!");
}
@Override
public void didExitRegion(Region region) {
Log.i(TAG, "I no longer see an beacon");
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
Log.i(TAG, "I have just switched from seeing/not seeing beacons: " + state);
}
});
try {
beaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
} catch (RemoteException e) {
}
}
@Override
protected void onDestroy() {
super.onDestroy();
beaconManager.unbind(this);
}
}
As I said, I get the UUID, the major and minor, but I get using
beaconManager.setRangeNotifier (new RangeNotifier () {...
setRangeNotifier
get the distance to the beacon, so that it is automatically updated every few seconds, for this reason, each time it is updated again get the UUID, the major and the minor ..
Is that the right place for get the UUID, the major and the minor? I tried to get it when I enter a region:
@Override
public void didEnterRegion(Region region) {
Log.i(TAG, "I just saw an beacon for the first time!");
}
…but without success.
I searched a lot of information, but can not find anything specific. My intention is to have a variable that contains the UUID, another that contains the major and the other containing the minor. That's right?
If this is not the right way, what is? It is correct as I do now?
I very much appreciate any help and put a mention of @davidgyoung …I hope not to bother.
Greetings.