@Override public void didEnterRegion(Region arg0) { // In this example, this class sends a notification to the user whenever a Beacon // matching a Region (defined above) are first seen. System.out.println("\nENTERED!!!\n"); Log.d(TAG, "did enter region."); Log.d(TAG, "Sending notification. [" + arg0.getUniqueId() + "]"); sendNotification(arg0.getUniqueId()); if (!haveDetectedBeaconsSinceBoot) { Log.d(TAG, "auto launching MainActivity"); // The very first time since boot that we detect an beacon, we launch the // MainActivity Intent intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Important: make sure to add android:launchMode="singleInstance" in the manifest // to keep multiple copies of this activity from getting created if the user has // already manually launched the app. this.startActivity(intent); haveDetectedBeaconsSinceBoot = true; } else { if (specifyViewActivity != null) { Log.d(TAG, "specifyViewActivity is not null"); // If the Monitoring Activity is visible, we log info about the beacons we have // seen on its display // specifyViewActivity.logToDisplay("I see a beacon again" ); } else { Log.d(TAG, "specifyViewActivity is null"); // If we have already seen beacons before, but the monitoring activity is not in // the foreground, we send a notification to the user on subsequent detections. } } }
/** * Method that returns the current {@link ProximityData} object informations as a the * corresponding {@link POI} object * * @return */ public POI asPOI() { POI ret = new POI(); String UUID = this.BLERegion.getId1() + (BLERegion.getId1() == null ? "" : ":" + BLERegion.getId1()) + (BLERegion.getId2() == null ? "" : ":" + BLERegion.getId2()); ret.setBeaconUuid(UUID); ret.setName(ID); ret.setLatitude(latitude); ret.setLongitude(longitude); ret.setRadius(radius); return ret; }
/** * Called with a state value of MonitorNotifier.INSIDE when at least one beacon in a Region * is visible. Called with a state value of MonitorNotifier.OUTSIDE when no beacons in a * Region are visible. */ @Override public void didDetermineStateForRegion(int state, Region region) { LogManager.d( TAG, "didDetermineStateForRegion() ,region uniqueId= " + region.getUniqueId() + " state=" + (state == 1 ? "inside" : "outside")); }
@Override public void didEnterRegion(Region region) { Log.d(TAG, "I just saw a beacon named " + region.getUniqueId() + " for the first time!"); try { Log.d(TAG, "entered region. starting ranging"); mBeaconManager.startRangingBeaconsInRegion(mAllBeaconsRegion); mBeaconManager.setRangeNotifier(this); } catch (RemoteException e) { Log.e(TAG, "Cannot start ranging"); } }
/** Called when no beacons in a Region are visible. */ @Override public void didExitRegion(Region region) { LogManager.d(TAG, "didExitRegion(),region uniqueId= " + region.getUniqueId()); /** * Tells the BeaconService to stop looking for beacons that match the passed Region object * and providing mDistance information for them. */ try { mBeaconManager.stopRangingBeaconsInRegion(ALL_VOLIAM_BEACONS_REGION); } catch (RemoteException e) { LogManager.d(TAG, "RemoteException:" + e.toString()); } }
public void handleExitedRegion(org.altbeacon.beacon.Region region) { if (isMonitoringRegion(region)) { String uuid = region.getId1() != null ? region.getId1().toString() : ""; String major = region.getId2() != null ? region.getId2().toString() : ""; String minor = region.getId3() != null ? region.getId3().toString() : ""; this.beaconManager.stopMonitoringRegion(new Region(this.regionName, uuid, major, minor)); this.inRegion = false; callback.whenExited(this.regionName); } }
/** Called when at least one beacon in a Region is visible. */ @Override public void didEnterRegion(Region region) { LogManager.d(TAG, "didEnterRegion(),region uniqueId= " + region.getUniqueId()); /** * 启动测距修正 Tells the BeaconService to start looking for beacons that match the passed * Region object, and providing updates on the estimated mDistance every * seconds(实际上是每个扫描周期) while beacons in the Region are visible. Note that the Region's * unique identifier must be retained to later call the stopRangingBeaconsInRegion method. * this will provide an update once per second with the estimated distance to the beacon * in the didRAngeBeaconsInRegion method. */ try { mBeaconManager.startRangingBeaconsInRegion(ALL_VOLIAM_BEACONS_REGION); } catch (RemoteException e) { LogManager.d(TAG, "RemoteException:" + e.toString()); } }
@Override public void didExitRegion(Region region) { Log.d(TAG, "I no longer see a beacon named " + region.getUniqueId()); }
private boolean isMonitoringRegion(org.altbeacon.beacon.Region region) { if (region != null && currentMonitoredRegion != null) { String id1 = region.getId1() != null ? region.getId1().toString() : ""; String id2 = region.getId2() != null ? region.getId2().toString() : ""; String id3 = region.getId3() != null ? region.getId3().toString() : ""; String currentId1 = currentMonitoredRegion.getId1() != null ? currentMonitoredRegion.getId1().toString() : ""; String currentId2 = currentMonitoredRegion.getId2() != null ? currentMonitoredRegion.getId2().toString() : ""; String currentId3 = currentMonitoredRegion.getId3() != null ? currentMonitoredRegion.getId3().toString() : ""; return (id1.equals(currentId1) && id2.equals(currentId2) && id3.equals(currentId3)); } else { return false; } }