Android蓝牙低功耗 - iBeacon

时间:2014-07-23 09:12:54

标签: android eclipse bluetooth-lowenergy android-bluetooth ibeacon-android

最近我得到了一个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以及主要和次要值:该应用程序显示了许多来自设备的服务和特征的Uuids ,但没有一个是设备的Proximity Uuid。

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

谢谢。

3 个答案:

答案 0 :(得分:2)

<强> EDIT / UPDATE:
变好.. AltBeacon
查看AltBeacon specifications

  

AltBeacon为信标传输和提供更高的透明度   Android,Windows和其他设备如何使用这些数据。


为什么RadiusNetworks的Android iBeacon图书馆不再可用:

  

供应商已开始遵守Apple制定的指导方针,并且   结果,被迫“擦洗”他们的任何参考产品   或Android设备与iBeacon检测之间的连接   协议

了解更多: Apple cracks down on iBeacon for Android
  我认为最好的选择似乎来自一直使用它的人,已经拥有它,可以与你分享,就像之前的提交一样,你可能无法获得所有组件 - 库,样本,服务

另外:A note from the CEO for Android iBeacon Lib, RadiusNetworks

现在,来到 Proximity UUID major 未成年人
虽然您可以查看read major, minor, uuid of beacons in androidSensorTag using iBeacon Technology,但我还没有找到直接获取参数的方法。在后者中,在iBeacon服务之后有一个主要的,次要的,uuid的指示,但TI仪器可能是限制。

在android中,作为标识符..您可以通过信标/ device address为每个device.getAddress()恢复BluetoothDevice device;

答案 1 :(得分:2)

以下两个是完全不同的东西,虽然它们都被称为UUID。

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

关于“关贸总协定服务的UUID”应该了解的内容:

  1. BLE外围设备可以实现GATT服务器。
  2. GATT服务器托管GATT服务。
  3. API“android.bluetooth.BluetoothGatt.getServices()”返回的是GATT服务列表(List&lt; BluetoothGattService&gt;)。
  4. BluetoothGattService.getUuid()返回服务的ID。
  5. 您应该了解的“iBeacon的接近UUID”:

    1. BLE外围设备广播广告包。
    2. 广告包的有效负载部分包含AD结构列表。
    3. AD结构包括(1)长度(1字节),(2)AD类型(1字节)和(3)AD数据。 AD结构格式在“蓝牙核心规范4.2”的“11广告和扫描响应数据格式”中描述。
    4. iBeacon是一种AD结构。
    5. AD iBeacon的类型为0xFF(表示制造商特定数据)。
    6. iBeacon的AD数据的前4个字节是0x4C,0x00,0x02和0x15。前2个字节(0x4C,0x00)表示“Apple,Inc。”接下来的2个字节(0x02,0x15)表示“iBeacon格式”。
    7. Proximity UUID(16字节),主要编号(大端2字节),次编号(大端2字节)和电源(1字节)跟在前4个字节之后。
    8. 因此,您需要做的是获取iBeacon信息(Proximity UUID,主要,次要,功率)如下。

      1. 将广告包的有效负载解析为AD结构列表。
      2. 对于每个AD结构,检查AD Type是否为0xFF,AD数据的前4个字节是0x4C,0x00,0x02和0x15。
      3. 满足条件2.将剩余字节解析为Proximity UUID,主要号码,次要号码和电源。
      4. 如果您使用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 as a kind of AD structures”。

答案 2 :(得分:1)

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

New AltBeacon Standard Allows Cross-Platform Proximity Apps

查看altbeacon.org