Как установить время сканирования iBeacon при вызове RangeNotifier?

Обычно для нового сканирования требуется 1 секунда.
Если сканирование занимает 1 секунду, я могу не выполнять слишком много действий, если хочу проанализировать данные.
Как изменить это значение?

Кроме того, для фоновой службы, как изменить значение freq?


person jjLin    schedule 12.03.2014    source источник


Ответы (1)


Если вы хотите изменить интервал сканирования по умолчанию для Android iBeacon Library, вы можете сделать это с помощью такой код:

 try {
     iBeaconManager.setForegroundScanPeriod(1100l); // 1100 mS
     iBeaconManager.setForegroundBetweenScanPeriod(0l); // 0ms
     iBeaconManager.updateScanPeriods();
  }
  catch (RemoteException e) {
     Log.e(TAG, "Cannot talk to service");
  }

Приведенный выше код устанавливает длительность сканирования 1100 мс и ожидание 0 мс между сканированиями. Это поведение по умолчанию.

Если вы хотите замедлить сканирование, вы обычно устанавливаете betweenScanPeriod в ненулевое значение, например 30 секунд. Когда вы делаете это, вы должны установить scanPeriod равным как минимум интервалу вещания ваших iBeacons — 1100 мс обычно достаточно, чтобы поймать рекламу iBeacons с частотой 1 Гц.

 try {
     iBeaconManager.setForegroundScanPeriod(1100l); // 1100 mS
     iBeaconManager.setForegroundBetweenScanPeriod(30000l); // 30,000ms = 30 seconds
     iBeaconManager.updateScanPeriods();
  }
  catch (RemoteException e) {
     Log.e(TAG, "Cannot talk to service");
  }

Стоит отметить, что на самом деле на iBeaconManager есть две такие настройки, одна для переднего плана и одна для фона. Это делается исключительно для удобства, потому что вы обычно хотите, чтобы сканирование происходило реже, когда ваше приложение находится в фоновом режиме. Независимо от того, настраиваете ли вы параметры переднего плана и фона или принимаете значения по умолчанию, вы можете активировать настройки фонового режима с помощью:

 try {
     iBeaconManager.setBackgroundMode(myActivity, true);
  }
  catch (RemoteException e) {
     Log.e(TAG, "Cannot talk to service");
  }

Существует также Pro-версия библиотеки Android iBeacon, основанная на выше, чтобы автоматически перевести ваше приложение в режим переднего плана или в фоновый режим в зависимости от того, отображается ли действие. Это самый простой способ настроить фоновое энергосбережение на Android.

person davidgyoung    schedule 12.03.2014
comment
где мне вызвать: iBeaconManager.setBackgroundMode(myActivity, true); в моей mainActivity? - person jjLin; 13.03.2014
comment
что такое моя активность? текущее действие или действие, которое я хочу запустить? - person jjLin; 13.03.2014
comment
myActivity — это любая активность Android (или приложение, или служба), которую вы используете и которая привязана к IBeaconManager. Если вы совершаете вызов из связанного действия, просто замените «myActivity» на «this». - person davidgyoung; 13.03.2014