检查Android中是否附近有蓝牙低能耗信标

时间:2014-05-23 08:00:05

标签: android bluetooth-lowenergy ibeacon

背景

我想编写一个Android应用程序,它可以检测我是否进入或离开某个区域。每个区域(比如建筑物)都有广告模式的BLE Beacon。我知道信标的mac adressess。 应用程序应在后台运行,并且应该是节能的。立即识别该区域并不重要,但是5分钟的窗口就足够了。

  • http://developer.android.com/guide/topics/connectivity/bluetooth-le.html它说你不应该“扫描一个循环”,但有没有其他方法来实现区域进入/离开事件?

  • 我对UUID,服务和连接感到有点困惑。这些问题与我的问题相关是否正确?

  • 据我所知,从蓝牙规范中,信标只能处理一个连接。所以我的应用程序实际上不应该连接到任何信标,如果我只对灯塔附近感兴趣,因为连接将停止信标广告,所以其他设备将不再看到它。这是对的吗?

相关问题

我想知道的似乎是一个常见的问题:

但大多数答案都是关于“Android iBeacon Library”,我不想使用它。

2 个答案:

答案 0 :(得分:5)

即使您不确定要使用Android iBeacon库,最好还是查看其源代码并复制创意和/或从中编写代码片段,这样您就可以获得贡献者的课程优势。我在建造它时学到了很多东西。这是开源的优势。

与您的问题相关的具体课程:

  • 是的,您需要某种逻辑来定期启动和停止蓝牙LE扫描,因此您需要在最广泛的意义上作为“循环”。我相信您引用的文档只是指Android的BLE扫描API的异步性质,您可以开始扫描一次,然后为每个发现的设备获取回调。因此,对于最简单的用例,循环会适得其反。

  • 是的,如果您连接到BLE设备,它将停止广告。因此,除非您需要交换的数据多于广告中的数据,否则请勿执行此操作。或者只在很短的时间内连接。

  • 术语UUID与BLE信标有两个主要含义。它可以表示服务UUID,它是BLE设备提供的GATT服务的唯一标识符。它还可以表示ProximityUUID,它是Apple iBeacon特定术语,用于在广告中发送的信标的三部分标识符的最重要部分。这两个词与彼此无关。除非您制作可连接的信标(见上文),否则服务UUID和GATT服务与您的任务无关。

从您的问题中不清楚您是否计划检测标准iBeacons或自定义BLE信标。以上答案适用于更一般的情况,但要知道标准的iBeacons是无连接的,并且不依赖于已知甚至静态的蓝牙Mac地址。虽然您的问题是针对Android的,但如果您构建了一个您希望与iOS一起使用的自定义信标解决方案,请知道iOS会在其API中加扰蓝牙Mac地址,因此您永远无法看到真正的Mac地址。

如果您要构建仅限Android的解决方案,可以使用蓝牙Mac作为iBeacon标识符。但是如果你这样做,那么就会意识到你的信标将具有静态的标识符,并且无法在许多BLE平台上轻松配置。这是Apple的iBeacon使用单独的ProximityUUID /主要/次要方案作为广告中嵌入的信标标识符的原因之一。

答案 1 :(得分:2)

iBeacon仅仅是苹果“劫持”蓝牙低能耗广告机制,并试图在不久的将来从“iBeacon认证费”中赚钱。 他们使用自己的制造商ID(0x004c)放入制造商数据块,该ID已分配给Apple使用。 广告数据由长度+类型+数据块组成。您应该找到制造数据类型,它是0xff,后跟这些字节: < 0x4c> < 0×00>