Я работаю с библиотекой AltBeacon (2.5.1) для обнаружения маяков. Я настраиваю диапазон с «универсальным» регионом, чтобы иметь возможность обнаруживать любой маяк в диапазоне, а затем делаю с ним свои дела. Проблема в том, что, когда у меня есть несколько маяков в диапазоне, обратный вызов didRangeBeaconsInRegion всегда предоставляет мне коллекцию только из 1 маяка за раз, и этот маяк является случайным среди всех существующих маяков ... Почему я не могу получить все маяки в радиусе действия в моей коллекции?
Все это делается из службы, я очистил все остальное, чтобы сохранить только соответствующие части кода ниже -> Надеюсь, я здесь что-то делаю не так?
public class MonitorService extends Service implements BeaconConsumer
{
private BeaconManager beaconManager;
@Override
public void onCreate()
{
super.onCreate();
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.setForegroundScanPeriod(5000l);
beaconManager.setBackgroundScanPeriod(5000l);
beaconManager.setForegroundBetweenScanPeriod(1100l);
beaconManager.setBackgroundBetweenScanPeriod(1100l);
setupBeaconManager();
}
private void setupBeaconManager()
{
if (!beaconManager.isBound(this))
beaconManager.bind(this);
}
private void unsetBeaconManager()
{
if (beaconManager.isBound(this))
{
beaconManager.unbind(this);
try
{
beaconManager.stopRangingBeaconsInRegion(new Region("apr", null, null, null));
}
catch (RemoteException e)
{
Log.i(TAG, "RemoteException = "+e.toString());
}
}
}
@Override
public void onBeaconServiceConnect()
{
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region)
{
Log.i(TAG,"didRangeBeaconsInRegion, number of beacons detected = "+beacons.size());
// HERE IT IS : the size is Always 1, but the beacon (UUID etc. can be different)
}
});
try
{
beaconManager.startRangingBeaconsInRegion(new Region("apr", null, null, null));
}
catch (RemoteException e)
{
Log.i(TAG, "RemoteException = "+e.toString());
}
}
@Override
public void onDestroy()
{
unsetBeaconManager();
super.onDestroy();
}
}
Я работаю над Android 5.1.1 с Nexus 6 (но дешевый телефон Wiko дает те же результаты). Маяки настроены на рекламу каждые 600 мс ... Но даже при 100 мс они также дают точно такие же результаты ...