在android中扫描信标的时间段没有按预期工作

问题描述 投票:0回答:1

我正在使用xamarin android中的信标。我希望扫描在60秒内完成,并在下一个扫描周期之间等待30秒。

public async void DetectAvailableBeacons()
{ 
        _monitorNotifier = new MonitorNotifier();

        _rangeNotifier = new RangeNotifier();

        _tagRegion = new Region("Region",null, null, null);

        _beaconManager.Bind(this);

        _beaconManager.SetBackgroundScanPeriod(60000);
        _beaconManager.SetForegroundScanPeriod(60000);
        _beaconManager.SetBackgroundBetweenScanPeriod(30000);
        _beaconManager.SetForegroundBetweenScanPeriod(30000); 

        _rangeNotifier.DidRangeBeaconsInRegionComplete += RangingBeaconsInRegionComplete;

    }

方法RangingBeaconsInRegionComplete填充我的列表foundBeacons与检测到的信标。

另外,我有一个方法可以获得所有可用的检测到的信标,如下所示:

ObservableCollection<DetectedBeacon> BeaconLocator.GetAvailableBeacons()
{
    return !_paused ? foundBeacons : null;
}

现在,我将方法GetAvailableBeacons()称为如下:

public void PopulateBeacons() {
   beaconsOnList = be.GetAvailableBeacons(); 
   PopulateBeacons();
}

我的问题是,有时候它丢失了一些信标,就是有些信标没有被检测到。此外,扫描间隔似乎不正常。有人可以提出什么问题吗?

android ibeacon ibeacon-android altbeacon
1个回答
1
投票

为了让您的扫描周期立即生效,最简单的解决方案是在调用bind之前移动调用以设置它们,所以它看起来像这样:

    _beaconManager.SetBackgroundScanPeriod(60000);
    _beaconManager.SetForegroundScanPeriod(60000);
    _beaconManager.SetBackgroundBetweenScanPeriod(30000);
    _beaconManager.SetForegroundBetweenScanPeriod(30000); 

    _beaconManager.Bind(this);

默认情况下,扫描将每1.1秒进行一次,并为您提供该时段内所有信标的结果。如果没有上面的代码更改,这可能就是您所看到的。

对于较短的扫描间隔,具有低广告速率的信标(例如,每秒仅通告一次的信标)通常不会出现在单个扫描周期的检测列表中。您可以通过增加扫描周期的长度来解决这个问题,如您所说,通过提高信标的广告费率,或构建维护最近检测到的信标的完整列表的代码逻辑,即使它们未被发现最近的扫描周期。

简短回答:如果您成功增加扫描周期,我怀疑这个问题会消失。

© www.soinside.com 2019 - 2024. All rights reserved.