/// <summary> /// Starts the monitoring region. /// </summary> /// <param name="UUID">UUI.</param> public void StartMonitoringRegion (string UUID) { UIApplication.SharedApplication.InvokeOnMainThread (delegate { // REQUIRED TO BE INVOKED ONN UI MAIN THREAD if (beaconManager == null) { beaconManager = new BeaconManager (); beaconManager.ReturnAllRangedBeaconsAtOnce = true; beaconManager.AuthorizationStatusChanged += (sender, e) => StartRangingBeacons (UUID); beaconManager.RangedBeacons += (sender, e) => { SystemLogger.Log (SystemLogger.Module.PLATFORM, "Ranged Beacon [found]"); Estimote.Beacon[] beacons = e.Beacons; //new UIAlertView("Beacons Found", "Just found: " + e.Beacons.Length + " beacons.", null, "OK").Show(); foreach (Estimote.Beacon beacon in beacons) { var b = new Appverse.Core.iBeacon.Beacon (); b.Address = beacon.MacAddress; b.Major = beacon.Major; b.Minor = beacon.Minor; b.Name = beacon.Name; b.UUID = beacon.ProximityUUID.AsString(); CLProximity proximity = beacon.Proximity; DistanceType proximityB; switch (proximity) { case CLProximity.Far: proximityB = DistanceType.FAR; break; case CLProximity.Immediate: proximityB = DistanceType.INMEDIATE; break; case CLProximity.Near: proximityB = DistanceType.FAR; break; default: proximityB = DistanceType.UNKNOWN; break; } b.setDistance (proximityB); b.Meters = (double)beacon.Distance; /* SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered UUID: " + b.UUID); SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Name: " + b.Name); SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Distance: " + b.Distance); SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Meters: " + b.Meters); SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Major: " + b.Major); SystemLogger.Log (SystemLogger.Module.PLATFORM, "K: DeviceDiscovered Minor: " + b.Minor); */ var key = UniqueKey(b); if (beaconDict.ContainsKey(key)) { beaconDict[key] = b; }else{ beaconDict.Add(key, b); } //beaconArray.Add (b); } }; } StartRangingBeacons (UUID); }); }
private Beacon FromCLBeacon(CLBeacon device) { Beacon beacon = new Beacon(); beacon.Minor = device.Minor.Int16Value; beacon.Major = device.Major.Int16Value; DistanceType d = DistanceType.UNKNOWN; switch (device.Proximity) { case CLProximity.Immediate: d = DistanceType.INMEDIATE; break; case CLProximity.Near: d = DistanceType.NEAR; break; case CLProximity.Far: d = DistanceType.FAR; break; case CLProximity.Unknown: break; } beacon.Distance = d; return beacon; }
/// <summary> /// return a Beacon from the device. /// </summary> /// <returns>Beacon</returns> /// <param name="device">Device</param> private Beacon FromDevice(IDevice device) { Beacon beacon = new Beacon(); beacon.UUID = device.ID.ToString(); beacon.Name = device.Name; return beacon; }
/// <summary> /// Uniques the identifier for beacon. /// </summary> /// <returns>The identifier for beacon.</returns> /// <param name="beacon">Beacon.</param> private static String uniqueIDForBeacon(Beacon beacon) { return (beacon.UUID + "#" + beacon.Major + "#" + beacon .Minor).ToUpper(); }