Hardware Reference
In-Depth Information
[
self
.
locationManager
stopRangingBeaconsInRegion:
self
.
beaconRegion
];
NSLog
(
@
"exited region"
);
}
// determine closest beacon
-
(
void
)
locationManager:
(
CLLocationManager
*)
manager
didRangeBeacons:
(
NSArray
*)
beacons
inRegion:
(
CLBeaconRegion
*)
region
{
__block
CLBeacon
*
closestBeacon
;
if
(
beacons
.
count
<
1
)
{
closestBeacon
=
nil
;
}
else
{
NSLog
(
@
"locationManager didRangeBeacons: %@"
,
beacons
);
[
beacons
enumerateObjectsUsingBlock:
^(
CLBeacon
*
beacon
,
NSUInteger
idx
,
BOOL
*
stop
)
{
if
((
closestBeacon
==
nil
)
||
(
beacon
.
rssi
>
closestBeacon
.
rssi
))
{
closestBeacon
=
beacon
;
}
NSLog
(
@
"closest beacon: %@"
,
closestBeacon
);
}];
}
if
(![
self
beacon:
self
.
closestBeacon
isSameAsBeacon:
closestBeacon
])
{
self
.
closestBeacon
=
closestBeacon
;
[[
NSNotificationCenter
defaultCenter
]
postNotificationName:
BobsBeaconTracker_ClosestBeaconChanged
object:
self
];
}
}
// compare beacons
-
(
BOOL
)
beacon:
(
CLBeacon
*)
beacon
isSameAsBeacon:
(
CLBeacon
*)
otherBeacon
{
return
([
beacon
.
proximityUUID
isEqual:
otherBeacon
.
proximityUUID
]
&&
(
beacon
.
major
==
otherBeacon
.
major
)
&&
(
beacon
.
minor
==
otherBeacon
.
minor
));
}
If this code were embedded in a museum application, the app could now determine the
closest beacons and then take the appropriate action (e.g., provide multimedia content
that futher explains the exhibit).