Как да задам време за сканиране на 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");
  }

Кодът по-горе настройва сканирането да продължи 1100ms и да изчака 0ms между сканиранията. Това е поведението по подразбиране.

Ако искате да забавите сканирането, обикновено задавате betweenScanPeriod на ненулева стойност, например 30 секунди. Когато направите това, трябва да зададете scanPeriod да бъде поне интервалът, който излъчват вашите iBeacons -- 1100ms обикновено са достатъчни, за да уловят рекламите на iBeacons с честота 1Hz.

 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 Library, която се основава на по-горе, за да поставите приложението си автоматично в режим на преден или заден план в зависимост от това дали дадено действие се вижда. Това е най-лесният начин да настроите фоново спестяване на енергия на Android.

person davidgyoung    schedule 12.03.2014
comment
къде трябва да извикам: iBeaconManager.setBackgroundMode(myActivity, true);, в моята mainActivity? - person jjLin; 13.03.2014
comment

Опитвам се да изпълня избран случай, когато клетка се промени в диапазон, за да изпълни макрос, когато се въведе конкретен текст. Това работи за една клетка (и кода, който следва) за "F50", но когато се опитам да използвам същия стил на код няколко реда по-късно, не работи.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("F50")) Is Nothing Then
Select Case Range("F50")
    Case "MPR-9A": Resize9
    Case "MPR-8A": Resize8
    Case "MPR-6A": Resize6
    Case "MPR-3A": Resize3
End Select
End If

If Not Intersect(Target, Range("F4:F45")) Is Nothing Then
Select Case Range("F4:F45")
    Case "M-20A": M20A
    Case "M-2X20A": M2X20A
    Case "M-20A-SP": M20ASP
End Select
End If

End Sub

Опитвам се да стартирам този код, когато поставям нова стойност някъде в диапазона F4:F45. Когато тази стойност бъде въведена, случаят проверява кой макрос да се изпълни. Макросите копират диапазон на друг лист и го поставят в клетката, която току-що е задействала макроса (която също включва няколко клетки отдясно и отдолу), и тези макроси работят добре, когато ги задействам ръчно.

Тръгнах по пътя на копиране/поставяне, защото се отказах от план А, който се опитваше да обедини клетката, която току-що е получила новата стойност, с 1 или 3 под нея и след това да въведа текст в клетките точно вдясно. Ако трябва да се върна към изпробването на този маршрут, ще се радвам да опитам да избегна копирането и поставянето.

- person jjLin; 13.03.2014
comment
myActivity е каквато и да е Android дейност (или приложение или услуга), която използвате, която е обвързана с IBeaconManager. Ако извършвате повикването от дейност, която е обвързана, просто заменете „myActivity“ с „this“. - person davidgyoung; 13.03.2014