是否可以使用Android更改iBeacon信标频率?

时间:2013-12-30 17:10:50

标签: android ibeacon ibeacon-android

我目前正在开发一个Android应用程序,可以使用库Android iBeacon Libraryhttp://developer.radiusnetworks.com/ibeacon/android/)来监控iBeacon的信号强度。

但是因为我们想要使用频率非常低的iBeacons来节省电池,我需要能够在频率强度监控期间频繁检测频率几分钟。问题是我使用的库似乎没有提供这个功能。我在网上搜索了提供此功能的其他库,但我找不到任何库。

你知道一个图书馆会让人改变iBeacon的信标频率吗?如果没有,我该如何进行编码?

2 个答案:

答案 0 :(得分:4)

我对您的问题的修订理解是这样的:您希望与iBeacon通信的Android库动态更改其广告费率。

不幸的是,我认为Android方面很容易。困难的是,我所知道的iBeacon制造商没有一个开放的API,允许您动态更改广告费率。 (虽然有些人允许您使用应用程序通过辅助蓝牙连接配置此速率。Radius Networks'小型USB供电的iBeacons以这种方式工作。)因为每个供应商的服务工作方式不同,您必须进行逆向工程他们的每个配置BLE服务如何工作。

如果你真的想这样做,我将采用以下方式:

  1. 构建您自己的自定义iBeacon,它具有辅助蓝牙LE服务,允许您连接到信标并更改其广告费率。一个很好的原型设计方法是使用iOS设备作为iBeacon或我公司的iBeacon Development Kits。对于基于iOS的信标,您可以在Objective C中编写辅助服务。对于IDK信标,您可以使用Linux支持的任何语言编写软件。

  2. 编写连接蓝牙服务的自定义Android代码,并根据需要设置广告费率。你可以在Android iBeacon Library旁边使用它。作为一个开源项目,您可以随时将代码合并到其中。 (我是跟你交谈的人!)

  3. 一旦您完成此工作,请与iBeacon供应商联系,为电池供电的信标制作自定义固件,完成相同的操作。硬件供应商会告诉您如何制作自定义固件。这通常需要专有的工作台工具,并且使用C语言或专有脚本语言完成。

答案 1 :(得分:1)

是的! Radius Networks的Android iBeacon Library支持此功能。下面是示例代码,它将前景和后台扫描周期都改为每5分钟一次。这意味着图书馆将花费五分钟进行扫描,并让您知道它在那段时间看到的iBeacons。 (前景默认值为1.1秒。)

您可以根据应用中的某种算法更改此频率。

iBeaconManager = IBeaconManager.getInstanceForApplication(this.getApplicationContext());

...

@Override
public void onIBeaconServiceConnect() {
    try {
      long five_minutes_in_millis = 5*60*1000l;
      iBeaconManager.setForegroundScanPeriod(five_minutes_in_millis); 
      iBeaconManager.setBackgroundScanPeriod(five_minutes_in_millis); 
    } catch (RemoteException e) {
        e.printStackTrace();
    }
}

完全披露:我是Radius Networks的员工,也是该图书馆的主要作者。