5

最近我得到了一个 iBeacon 设备,目的是创建可以识别和使用它的 Android 应用程序。我是在 Android 应用程序中使用蓝牙的新手,还有很多事情我还不知道。在互联网和这个论坛中,我发现了使用 Radius Networks 的 Android IBeacon 库的建议,但是,唉,现在它不再可用:

https://github.com/RadiusNetworks/android-ibeacon-service

因此,我开始使用 Android 开发人员指南中关于低功耗蓝牙的代码: https ://developer.android.com/guide/topics/connectivity/bluetooth-le.html

使用此代码我可以检测到设备,甚至可以连接到它,但我不知道如何获取 Proximity Uuid 以及主要和次要值:该应用程序显示了很多来自设备的服务和特征的 Uuid,但没有是设备的 Proximity Uuid。

任何人都可以告诉我如何使用 Android 蓝牙 LE API 获取这些数据,或者帮助我获取 Radius Networks 的 Eclipse 的 Android iBeacon 库以及使用指南或展示如何使用它的示例?

谢谢你。

4

3 回答 3

2

编辑/更新:
它变得更好.. AltBeacon
检查AltBeacon 规范

AltBeacon 为信标传输的内容以及 Android、Windows 和其他设备如何使用这些数据带来了更高的透明度。


为什么 RadiusNetworks 的 Android iBeacon 库不再可用:

供应商已开始遵守 Apple 制定的指导方针,因此被迫“清除”他们的产品中的任何参考或 Android 设备之间的连接以及他们对 iBeacon 协议的检测。

阅读更多: Apple 打击适用于 Android 的 iBeacon
我认为最好的选择似乎是来自一直在使用它、已经拥有它、可以与你分享它的人,因为从以前的提交中,你可能不会得到每个组件 - 库,样品,服务

另外:来自 RadiusNetworks Android iBeacon Lib 的 CEO 的说明

现在,来到Proximity UUIDmajor , minors
就参数而言,我还没有找到直接获取它的方法,尽管您可以使用 iBeacon 技术查看在 android 和SensorTag中读取主要、次要、uuid 信标. 在后者中,iBeacon 服务后有主要、次要、uuid 的指示,但 TI 仪器可能是限制。

device address在android中,作为标识符..您可以恢复device.getAddress()beacon/for each BluetoothDevice device;..

于 2014-07-23T09:59:49.580 回答
2

以下两个是完全不同的东西,尽管都称为 UUID。

  • 托管在 BLE 外围设备上的 GATT 服务的 UUID。
  • iBeacon 的接近度 UUID。

关于“GATT 服务的 UUID”你应该知道的:

  1. BLE 外围设备可以实现 GATT 服务器。
  2. GATT 服务器托管 GATT 服务。
  3. API“android.bluetooth.BluetoothGatt.getServices()”返回的是 GATT 服务列表 (List<BluetoothGattService>)。
  4. BluetoothGattService.getUuid() 返回服务的 ID。

关于“iBeacon 的 Proximity UUID”你应该知道的:

  1. BLE 外围设备广播广告数据包。
  2. 广告数据包的有效负载部分包含一个 AD 结构列表。
  3. AD结构由(1)长度(1字节)、(2)AD类型(1字节)和(3)AD数据组成。AD结构格式在“Bluetooth Core Specification 4.2”的“11 ADVERTISING AND SCAN RESPONSE DATA FORMAT”中有描述。
  4. iBeacon 是一种 AD 结构。
  5. iBeacon 的 AD 类型为 0xFF(表示制造商特定数据)。
  6. iBeacon 的 AD Data 的前 4 个字节分别为 0x4C、0x00、0x02 和 0x15。前 2 个字节(0x4C、0x00)表示“Apple, Inc.”。接下来的 2 个字节(0x02、0x15)表示“iBeacon 格式”。
  7. Proximity UUID(16 字节)、主编号(大端 2 字节)、次编号(大端 2 字节)和功率(1 字节)在前 4 个字节之后。

所以,要获取 iBeacon 信息(Proximity UUID、major、minor、power),你需要做的事情如下。

  1. 将广告数据包的有效负载解析为 AD 结构列表。
  2. 对于每个 AD 结构,检查 AD Type 是否为 0xFF,AD Data 的前 4 个字节为 0x4C、0x00、0x02 和 0x15。
  3. 当满足2.的条件时,将剩余字节解析为Proximity UUID、major number、minor number、power。

如果您使用nv-bluetooth,您可以从广告包中提取 iBeacon,如下所示:

public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
{
    // Parse the payload of the advertising packet.
    List<ADStructure> structures =
        ADPayloadParser.getInstance().parse(scanRecord);

    // For each AD structure contained in the advertising packet.
    for (ADStructure structure : structures)
    {
        if (structure instanceof IBeacon)
        {
            // iBeacon was found.
            IBeacon iBeacon = (IBeacon)structure;

            // Proximity UUID, major number, minor number and power.
            UUID uuid = iBeacon.getUUID();
            int major = iBeacon.getMajor();
            int minor = iBeacon.getMinor();
            int power = iBeacon.getPower();

            ........

详见“ iBeacon 作为一种 AD 结构”。

于 2015-03-20T20:07:34.117 回答
1

RadiusNetworks 结合新的跨平台信标邻近规范“重新发布”了库和示例。

新的 AltBeacon 标准允许跨平台接近应用

查看altbeacon.org

于 2014-07-29T13:32:16.633 回答