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

Mr.*_*nes 4 android bluetooth-lowenergy ibeacon

背景

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

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

  • 我也对UUID,服务和连接感到困惑.它是正确的,这些问题是相关的我的问题?

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

相关问题

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

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

dav*_*ung 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 /主要/次要方案作为广告中嵌入的信标标识符的一个原因.