【发布时间】:2020-02-04 08:27:37
【问题描述】:
当你在beacon区域之外时,有时会进入didEnterRegion。
有时在信标区域时不进入 didEnterRegion。 这会持续很长时间。
终端是富士通箭头M03。 Android™ 6.0
当你在 didEnterRegion 时,你可以通过 didRangeBeaconsInRegion 获取信标信息。
活动被前台服务使用。
BeaconManager 在该服务中用作前台。
屏幕已关闭。但是,wakeLock 是在服务中获取的。
信标扫描间隔为 4 秒。 setForegroundBetweenScanPeriod (4000);
每隔 10 秒关闭/开启监控。
永远不要进入 didExitRegion。 我觉得有必要开启监控10秒以上才能进入。
需要牢固生成didExitRegion吗?
最好不要每 10 秒打开/关闭一次监控? ON 总是更好吗?
信标检测设置
g_beaconManager = BeaconManager.getInstanceForApplication(this);
g_beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
g_beaconManager.bind(this);
g_beaconManager.setForegroundBetweenScanPeriod(4000);
g_region = new Region("iBeacon", null, null, null);
BeaconManager 服务
@Override
public void onBeaconServiceConnect() {
g_beaconManager.addMonitorNotifier(new MonitorNotifier() {
public void didEnterRegion(Region region) {
Log.d("Beacon", "didEnterRegion Success!!");
if (g_beaconManager.getRangedRegions().size() == 0) {
try {
g_beaconManager.startRangingBeaconsInRegion(g_region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
@Override
public void didExitRegion(Region region) {
Log.d("Beacon", "didExitRegion Success!!");
if (g_beaconManager.getRangedRegions().size() != 0) {
try {
g_beaconManager.stopRangingBeaconsInRegion(g_region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
Log.d("Beacon", "didDetermineStateForRegion Success!!");
if (g_beaconManager.getRangedRegions().size() == 0) {
try {
g_beaconManager.startRangingBeaconsInRegion(g_region);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
});
try {
g_beaconManager.startMonitoringBeaconsInRegion(g_region);
} catch (RemoteException e) {
e.printStackTrace();
}
g_beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> Beacons, Region region) {
Beacon lBeacon_Most_Near_Distance = null;
Log.d("Beacon" , "addRangeNotifier Success!!");
for (Beacon beacon : Beacons) {
if (lBeacon_Most_Near_Distance == null)
{
lBeacon_Most_Near_Distance = beacon;
}
else
{
if (lBeacon_Most_Near_Distance.getDistance() > beacon.getDistance())
{
lBeacon_Most_Near_Distance = beacon;
}
}
}
}
});
}
每 10 秒关闭/开启一次监控
try {
if (g_beaconManager.getRangedRegions().size() != 0) {
g_beaconManager.stopRangingBeaconsInRegion(g_region);
}
if (g_beaconManager.getMonitoredRegions().size() != 0) {
g_beaconManager.stopMonitoringBeaconsInRegion(g_region);
} else {
g_beaconManager.startMonitoringBeaconsInRegion(g_region);
}
} catch (RemoteException e) {
e.printStackTrace();
}
【问题讨论】:
标签: ibeacon-android