1

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

但是因为我们想用频率很慢的iBeacons来节省电池,所以我需要能够提高频率几分钟,以便在信号强度监测过程中频繁检测。问题是我使用的库似乎没有提供这个功能。我在网上搜索了可以提供此功能的其他库,但我找不到。

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

4

2 回答 2

4

我对您的问题的修改后的理解是:您想要一个与 iBeacon 通信以动态更改其广告费率的 Android 库。

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

如果你真的想这样做,我会这样做:

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

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

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

于 2013-12-30T22:55:24.843 回答
1

是的!Radius Networks的Android iBeacon 库支持这一点。下面是将前台和后台扫描周期更改为每 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 的员工,也是该库的主要作者。

于 2013-12-30T18:52:23.817 回答