天道酬勤,学无止境

iBeacon 的 UUID 在不同的设备上是不同的(UUIDs of iBeacons are different on different devices)

问题

我正在开发一个将使用 iBeacons 进行室内导航的应用程序,我发现函数locationManager:rangingBeaconsDidFailForRegion:withError:被调用的速率不够高,所以我要添加来自 CoreBluetooth 的centralManager:didDiscoverPeripheral:advertisementData:RSSI:的 RSSI 数据centralManager:didDiscoverPeripheral:advertisementData:RSSI:

我发现了一个奇怪的事实:当我使用 CoreLocation 收听 iBeacon 并记录外围设备 ID 时:

- (void)centralManager:(CBCentralManager *)central 
    didDiscoverPeripheral:(CBPeripheral *)peripheral 
    advertisementData:(NSDictionary *)advertisementData 
    RSSI:(NSNumber *)RSSI
{
    NSLog(@"%@, RSSI: %@", peripheral, RSSI);

每个信标在不同设备上报告有不同的 UUID:

A25804BD-D77A-5004-4C2C-301D996C7367 - my iPhone 5
843F4237-6059-9A5E-AA34-0BD92304BE1F - colleague's iPhone 5
77685805-C253-52BD-B787-8B95308834FB - other colleague's iPad mini

这个想法是将每个信标的 UUID 绑定到它的位置,所以这种行为非常破坏功能。

为什么物理上相同的信标(未关闭/打开)的 UUID 在不同的设备上是不同的? 这是预期的行为吗? 如果是,我怎么能选择退出?

回答1

您无法使用CoreBluetooth读取标准 iBeacon 的标识符。 正如 Chris Stratton 在他的评论中所说,CoreBluetooth 给你的 UUID 是一个设备 UUID,它是由 iOS 在每个会话的基础上随机生成的。 它与 iBeacon ProximityUUID 无关。

更多关于为什么你不能用CoreBluetooth读取 iBeacon 标识符的CoreBluetooth在这里:http://developer.radiusnetworks.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons.html

确实,您只能根据locationManager:didRangeBeacons:inRegion:回调进行 RSSI 测量。 这是进行自定义距离估计的真正障碍。 在幕后,iOS 可以为以 10Hz 传输的 iBeacons 收集 10 倍的测量值。 您可以使用CoreBluetooth获得更多测量结果是正确的,但问题是没有可靠的方法来排列您使用CoreBluetooth看到的哪些蓝牙设备与您可以使用CoreLocation看到的CoreBluetooth相对应。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在Android中读取广告包(Read advertisement packet in Android)
    问题 我正在研究一个 BLE 传感器,它是广告制造商特定的数据。 是否有任何示例代码演示如何在 Android 中接收广告数据包并解析其有效负载? 回答1 这就是我要找的: BLE 扫描 API BluetoothAdapter.startLeScan(ScanCallback) 需要扫描结果的回调函数。 该方法需要如下所示: private BluetoothAdapter.LeScanCallback ScanCallback = new BluetoothAdapter.LeScanCallback()onLeScan(final BluetoothDevice device, int rssi, final byte[] scanRecord) {...} scanRecord 变量是一个字节数组,其中包含广告数据包负载。 根据 BLE 规范,有效载荷的结构非常简单,如下所示: 数据包最长可达 47 个字节,包括: 1 字节序言 4字节访问地址 2-39 字节广告 channelPDU 3 字节 CRC 对于广告通信通道,访问地址始终为 0x8E89BED6。 PDU 又具有自己的标头(2 个字节:有效载荷的大小及其类型——设备是否支持连接等)和实际有效载荷(最多 37 个字节)。 最后,payload的前6个字节是设备的MAC地址,实际信息最多可以有31个字节。
  • iBeacon在后台-用例(iBeacon in the background - Use cases)
    问题 有关iBeacon及其背景功能的SO问题越来越多,在这一点上有些困惑。 我一直在测试AirLocate项目。 iBeacon具有2种“功能”:区域监视和测距。 区域监视仅限于20个区域,并且可以在(侦听设备的)后台运行,并且具有不同的委托来通知侦听应用程序(和用户)该区域的进入/退出-即使应用程序在后台或电话被锁定。 测距仅在前景中起作用,但是将返回(向监听设备发送)所有找到的iBeacon及其属性(UUID等)的数组(无限制?)。 此外,监视20个区域是设备限制。 如果用户使用地理围栏提醒,则其他使用区域监视的应用程序; 这将降低该数字。 所以我们是说我无法部署一个购物中心范围内(超过100个商店)的应用程序,而该应用程序在后台或手机被锁定时,该应用程序使用商店iBeacons向用户发送“特定于商店”的通知吗? 我收集到广告设备(信标)也必须在前台,以对收听设备可以“进入”的区域做广告。 我们是说,如果商店的拥有者拥有iOS设备; 例如,我不能要求他至少在早期使用他的iPhone作为广告设备(信标)来节省他的钱-因为该应用程序可能不会一直处于前台? 因此,在iBeacon + MLB的情况下,应用使用单个UUID(或<20 UUID)来确定进入门,然后将要求用户解锁手机/将应用带到前台使用它(找到座位等)? 然后,我可以将iBeacon称为单个位置/事件(商店,公园等)功能
  • UUIDs of iBeacons are different on different devices
    I'm developing an application that will use iBeacons for indoor navigation, and I found that the rate the function locationManager:rangingBeaconsDidFailForRegion:withError: is being called is not high enough, so I'm going to add the RSSI data from CoreBluetooth's centralManager:didDiscoverPeripheral:advertisementData:RSSI:. And I found a curious fact: when I listen to the iBeacon with CoreLocation and log the peripheral id: - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *
  • 将Macbook变成iBeacon(Turn Macbook into iBeacon)
    问题 我知道我可以将iOS设备转换为iBeacon(iOS7设备可以充当iBeacon吗?)。 不幸的是,我只有一个设备,信标还没有到。 因此,我想知道如何将MacBook Air(2011年中,确实支持蓝牙4.0)转换为iBeacon以进行测试。 是否有可用的现成应用程序,例如iOS的airlocate? 提前致谢! 回答1 注意:这仅适用于小牛,不适用于优胜美地。 Mavericks在Core Location中没有添加到iOS 7的iBeacon支持。但是,Mavericks现在可以充当BLE外围设备。 鉴于iBeacon基本上是外围设备,应该可以(确实有可能)使用Mavericks作为iBeacon。 为了在iOS上创建iBeacon,您首先创建一个CLBeaconRegion对象,然后使用CLBeaconRegion peripheralDataWithMeasuredPower:方法获取一个NSDictionary其中包含要广播的必要广告数据。 如果您从iOS设备上获取此NSDictionary的内容并在Mavericks上使用,则您将获得一个iBeacon。 我创建了一个类来简化此过程,并允许您直接在Mavericks上生成广告数据字典。 源代码位于https://github.com/mttrb/BeaconOSX
  • Android设备可以充当iBeacon吗?(Can an Android device act as an iBeacon?)
    问题 Android设备可以充当iBeacon并确定其他Android设备何时进入其范围吗? 这些其他Android设备是否需要打开蓝牙? 如果客户进入我的商店,但他的设备上未安装我的应用程序,那么iBeacon可以工作,还是必须先安装该应用程序? 每天都有如此多的客户来我们的商店逛逛,但是如果他们没有安装我的应用程序,那么iBeacon概念行得通吗? 回答1 是是在Android 5+上是可能的,并且您可以在Android Beacon库中找到用作信标传输的开源代码。 Google Play商店的Beacon Scope应用程序中还有一个功能齐全的信标发射器版本。 这是一个使用Android Beacon库传输iBeacon的示例: Beacon beacon = new Beacon.Builder() .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6") .setId2("1") .setId3("2") .setManufacturer(0x004c) .setTxPower(-59) .build(); BeaconParser beaconParser = new BeaconParser() .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")
  • 树莓 iBeacon 未检测到(Raspberry iBeacon not detecting)
    问题 我最近试图在树莓派上的 BLE 加密狗(剑桥硅无线电)上配置 ibeacon。 参考:http://developer.radiusnetworks.com/2013/10/09/how-to-make-an-ibeacon-out-of-a-raspberry-pi.html 我收到这条消息: HCI Command: ogf 0x08, ocf 0x0008, plen 44 1E 02 01 1A 1A FF 4C 00 02 15 E2 C5 6D B5 DF FB 48 D2 B0 60 D0 F5 A7 10 96 E0 00 00 00 00 C9 00 00 00 00 00 00 00 00 00 00 00 00 00 > HCI Event: 0x0e plen 4 01 08 20 12 该应用程序甚至找不到信标。 虽然我可以看到加密狗在这个命令上闪烁着一些光: sudo hciconfig hci0 leadv 0 但什么都没有被检测到。 因此,从应用商店中打开一个名为 LIGHTBLUE 的应用,它会检测到具有不同 UUID 的蓝牙。 我已经尝试了很多次了。 并已完成教程中的所有步骤。 但是这个蓝牙设备不会出现。 另外,我很想知道 0x08 和 0x0008 是什么,如果我想投射不同的 UUID,我该怎么办? 但那是后半部分... 现在,THE
  • 在后台将iPhone作为iBeacon运行(Run iPhone as an iBeacon in the background)
    问题 是否可以将iOS 7设备作为Bluetooth LE外围设备(iBeacon)运行,并在后台进行广告宣传? 我已经能够使用下面的代码在前台进行广告发布,并且可以从其他iOS设备上看到它,但是一旦我回到主屏幕,它便停止了广告发布。 我确实在plist中添加了蓝牙外围设备背景模式,但这似乎无济于事,尽管我确实得到提示,说该设备希望在背景中使用蓝牙。 我是在做错什么,还是在iOS 7中是不可能的? peripManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral { if (peripheral.state != CBPeripheralManagerStatePoweredOn) { return; } NSString *identifier = @"MyBeacon"; //Construct the region CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:identifier]; //Passing
  • 如何将数据发送到变成iBeacon的iphone?(How to send data to an iphone which is turned into a iBeacon?)
    问题 如何将数据发送到充当iBeacon的iPhone? 我正在寻找以下流程: 搜索附近的iBeacons 连接到一些iBeacon 在设备之间交换数据 有谁知道如何将不同的蓝牙功能放在一起使之成为可能? 提前 回答1 标准iBeacon是仅传输设备,移动设备可以看到它们,但实际上并不“连接”到它们或交换数据。 但是,您仍然可以按照自己的要求进行操作,无论您是否在所有设备上都有应用程序以及网络服务都可以进行数据传输。 这将允许设备A和B在附近时互相检测并交换数据。 就是这样: 您在设备A和B上的应用程序在充当iBeacon(通过应用程序特定的标识符和电话特定的标识符进行广告的存在)与范围内的iBeacon信号(包括应用程序特定的标识符)之间进行切换。 在其测距周期内,设备A上的应用程序将检测到来自设备B的iBeacon传输,其中包括您的应用程序标识符和设备B的设备标识符。 然后,应用程序A使用源“ A”和目标“ B”以及要传输的任何数据(例如“设备A向设备B打个招呼”)对Web服务进行“写入”调用。 该应用程序还将定期向Web服务发出“读取”调用。 在此示例中,设备B将读取发往B的任何信息,并且Web服务将返回一条记录,表明设备A已向其发送了一条消息,其中包含数据“设备A向设备B打个招呼”。 由于两部手机也都运行相同的过程,因此这种通信可以双向发生。 回答2
  • iBeacon /低功耗蓝牙(BLE设备)-最大信标数(iBeacon / Bluetooth Low Energy (BLE devices) - maximum number of beacons)
    问题 我想通过iPhone(5s)上的一个应用程序一次跟踪50-100 m半径内的大量信标(〜500)。 我已经看过规范并在线查看了,我看不到使用BLE一次可以跟踪的信标数量是否有任何限制。 有人知道您可以跟踪的信标数量是否受到限制,或者iPhone 5s是否可以跟踪那么多信标? 回答1 您使用了单词track一词,但是iOS有两种不同的方法:监视和测距。 您最多可以设置20个区域进行监视。 (在startMonitoringForRegion:方法的文档中找到。)如果您的应用程序在后台,则区域限制通常会发挥作用。 当您进入或离开要监视的区域时,操作系统会提醒您的应用程序(等待或花费几分钟)。 操作系统甚至会启动您的应用程序只是为了让它知道发生了什么(尽管只是很短的时间)。 另一种方法是测距,即查找设备的蓝牙范围内的所有信标(通常在100英尺左右的范围内进行收发)。 如果您的信标分布在100英里以上,那么您可能不会在这里遇到任何实际限制。 我没有为此找到任何文档,我只用四个信标进行测试,一次只能工作四个。 这是处理您的情况的一种方法。 使所有500个信标使用相同的UUID,并使用initWithProximityUUID:identifier:方法创建信标区域。 (标识符仅适合您-它不会影响任何内容)。 开始监视该信标区域。 这样一来,只要找到500个信标之一,您的应用就会收到通知
  • iBeacon 广告 ID 是否唯一?(Are iBeacon advertising IDs unique?)
    问题 我们正在与 iBeaons 讨论在跨国多个地点的大规模部署方案。 有人提出了一个问题,即 iBeacons 用于宣传其存在的 ID 是否是唯一的? 因为我们的客户希望真正确定该应用程序仅响应特定的 iBeacons,而不响应其他冒充相同 ID 的内容(即使是无意中)。 如果不是唯一的,协议是否允许 iBecaons 公布任何额外的身份验证信息? 回答1 完全有可能冒充另一个 iBeacon。 我带着 Android iBeacon Locate 应用程序的副本去了华盛顿特区的 Apple Store,并用它来扫描 Apple 商店中 iBeacon 的标识符。 然后我回到我的办公室并配置我自己的 iBeacon 来传输同样的三部分标识符,并且能够让我的 iPhone 在商店中从 Apple 获得相同的消息。 如果其他人真的想这样做,您就无法阻止他们这样做。 但好消息是,对于大多数用例,其他人并没有真正的动机来这样做。 也就是说,iBeacon 标识符的无意重叠是极不可能的。 如果您使用标准 UUID 生成器生成自己的 ProximityUUID,则另一个生成的 ProximityUUID 意外相同的几率非常小——小于被陨石击中的几率。 标准 iBeacons 没有任何其他身份验证机制。 它们是无连接、仅传输的设备,仅发送由三部分组成的标识符(接近 UUID、主要、次要
  • iBeacon支持如何在iOS 7.1中真正改变?(How is iBeacon support REALLY changed in iOS 7.1?)
    问题 我在网上看到有人声称新发布的iOS 7.1支持iBeacon。 具体来说: 即使用户明确杀死了您的应用程序,系统仍应将didEnterRegion / didExitRegion事件通知给您的应用程序。 didEnterRegion / didExitRegion通知应该从后台和/或在锁定设备的情况下更快。 我无法通过自己的测试来确认这两个声明中的任何一个。 实际上,我似乎不太可能从锁定的设备获取didEnterRegion / didExitRegion通知。 (更准确地说,我似乎收到didEnterRegion通知,但未收到didExitRegion通知)。 那可能是因为Apple让我删除了info.plist中的BLE后台模式条目-我不确定。 我仍在尝试解决这个问题。 回答1 一开始我在设置测试时遇到了麻烦,但是在杀死iPhone 4s和iPhone 5s机型上的iOS 7.1中的应用程序后,我亲眼目睹了背景区域条目回调。 有关测试的详细信息和复制说明,请参见下面的评论。 我还对iPhone 4S的背景检测时间进行了测试,但在iOS 7.1上仍然看到15分钟的延迟。 我的完整测试结果和方法学在这里描述。 最后,我还对升级到iOS 7.1之前和之后在同一设备上的“准确性”(以米为单位)测量的波动做了一些测试。 我看不出估算的噪声有明显的差异。 下图显示了升级前后的结果
  • 结合 iBeacon 蓝牙低功耗与 Android 4.3(Combine iBeacon bluetooth low energy with Android 4.3)
    问题 我正在寻找一种从 Android 设备检测 iBeacon(iOS 7.0 功能)的方法。 我阅读了 Android 文档,其中 iBeacon 似乎是某种发送其位置的 GATT 服务器。 虽然 Android 文档说我不应该轮询这些数据,但对于检测来说,这将是必要的。 我用谷歌搜索了很多,但这个话题很新(我什至创建了一个新标签 ibeacon),所以如果我能从 iOS 世界获得一些描述实现的资源链接,我会很高兴。 另外,如果有一些我还没有找到的 Android 库会很好。 回答1 编辑:下面的库已移至此处: https://github.com/AltBeacon/android-beacon-library 我已将 iOS7 iBeacon SDK 移植到 Android,并且能够查看标准 iBeacon 并估计它们的范围。 该代码可在此处获得: https://github.com/RadiusNetworks/android-ibeacon-service 为此,您需要引入低功耗蓝牙 API 的 Android 4.3。 您还需要具有低功耗蓝牙芯片组的设备。 如果您不想使用上面的完整库,您可以推出自己的库。 iBeacons 每秒简单地传输一次 BLE 广告,该广告以已知的字节序列开始。 您只需告诉 Android 进行一次 BLE 扫描,获取每个广告,然后查找以已知
  • 我可以让我的iOS应用显示在锁定屏幕的左下角吗?(Can I get my iOS app to appear on the lower left corner of the lock screen?)
    问题 如何使我的应用程序图标显示在锁定屏幕的左下角,并将其链接到应用程序商店? 我可以使用iBeacons来控制它吗? 在应用商店中没有该应用的情况下,是否易于测试? 回答1 您必须先在iOS设备上安装应用程序,然后才能使用iBeacons触发任何功能。 无论用户界面是什么,都无法通过信标自动提示用户从AppStore下载您的应用程序。 唯一的例外是,如果iOS设备已经安装了另一个应用程序,提示用户下载您的应用程序。 您甚至可以使用预装的应用程序来执行此操作,该应用程序可以响应诸如Passbook之类的信标。 但是即使在这种情况下,您也必须以某种方式让第三方应用程序开发人员输入自定义代码以链接到iBeacon检测上的AppStore页面,或者以某种方式使用户输入新的存折条目以提示安装您的应用程序。 最重要的是,所有这些例外通常比让人们通过其他机制安装您的应用程序难。 对不起。 编辑:似乎很多有关此的报告实际上是指iOS8的新的“建议的应用程序”功能。 这是一个AppStore功能,它使用地理围栏(不是信标)来查找与您的位置相关的应用。 设置中此功能的说明说: 启用此选项将允许iOS为尚未安装的App Store应用提供建议。 这些可以基于您已经安装的内容或附近的人感兴趣的内容。 同样,这是基于地理位置而非信标,并且不清楚建议是否基于算法(其他人经常在附近使用应用程序),数据库
  • 搜索所有iBeacon,而不仅仅是使用特定的UUID(Search for all iBeacons and not just with specific UUID)
    问题 是否可以搜索附近的所有iBeacons ? 我知道可以通过UUID搜索iBeacons 。 但是我想在附近找到所有的iBeacons 。 回答1 iBeacon是一个区域,并具有UUID作为定义属性。 因此,您只能搜索与UUID匹配的内容。 找到具有特定UUID的一个或多个后,可以使用委托回调找出最接近的UUID,信标存储在按距离排序的数组中。 上面有很棒的示例代码,还有一个非常详细的WWDC视频会议:“核心位置的新功能” 回答2 与常规BLE外设相比,iBeacon是更高级别的构造。 根据可从Apple文档确定的信息,信标与其服务UUID绑定在一起。 即,一个信标家族是一个“区域”,您根据信标对您的范围和可见性进入或离开一个区域,而不是相反。 不幸的是,Apple使用了“区域”一词,我们大多数人可能将其与MapKit相关联,因此这增加了普遍的困惑 这是个坏消息:您只能扫描您知道的ProximityUUID,没有“通配符”接近度UUID。 此外,CLBeacons不会以较低级别的CoreBluetooth胆量暴露太多,因此,如果您想找到所有碰巧在您附近的信标,则必须使用CoreBluetooth,扫描外围设备,然后查看返回的外围设备并向他们每个人查询以找到信标。 当然,Apple既未注册(未注册Bluetooth SIG),也未发布iBeacon特性,因此
  • 我们可以在后台启动iBeacon发射器吗?(Can we start an iBeacon transmitter in the background?)
    问题 我有一个iPhone应用程序,在其中创建了一个发送器和一个接收器。 但是,当屏幕锁定或应用程序发送到后台时,发送器停止发送。 我是否仍可以在后台继续传输(又称为广告,广播)? 回答1 抱歉不行。 iOS确实允许对蓝牙服务进行后台广告,但只能使用打破iBeacon广告格式的专有技术。 结果,如果您的应用程序开始以iBeacon的形式传输,然后切换到后台,则其传输将仍然存在,但将不再被iBeacon检测器接收。 浏览此处获取更多信息: ...您应注意,应用在后台运行时的广告投放方式与应用在前台运行时的投放效果有所不同。 特别是,当您的应用在后台进行广告宣传时,CBAdvertisementDataServiceUUIDsKey广告关键字的值中包含的所有服务UUID会放置在特殊的“溢出”区域中; 只有通过显式扫描它们的iOS设备才能发现它们。 最重要的是,iOS设备在后台时无法作为iBeacons进行传输。 编辑4/11/2020:苹果公司宣布了一个新的信标广告计划,该广告将在后台运行。 有关更多信息,请参见此处。
  • iOS CoreBluetooth / iBeacon:同时发布iBeacon和外围设备服务(iOS CoreBluetooth / iBeacon: Advertise an iBeacon and a peripheral service concurrently)
    问题 我正在为iOS编写一个应用程序,该应用程序要求该应用程序同时宣传iOS iBeacon和外围设备服务。 有必要对服务进行广告宣传,而不是在外围设备上简单地发现它,因为用例需要中心(以BLE的说法)由于iOS(但仍在后台)被唤醒后由于与iBeacon接近而将外围设备连接到外围设备。 在中心服务器上后台运行的应用程序只能通过可用服务发现外围设备,而不能发现所有外围设备。 我的代码可用来宣传服务或iBeacon,但我还没有弄清楚如何同时做这两个事情。 iBeacon可能使用了38字节的可用空间中的21字节,而根本没有足够的空间来宣传信标和服务? 这有效(信标): self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:1 minor:1 identifier:@"bentboolean"]; NSMutableDictionary *dict = [[self.beaconRegion peripheralDataWithMeasuredPower:nil] mutableCopy]; [self.peripheralManager startAdvertising:dict ]; 这有效(服务): NSMutableDictionary *dict = [
  • IBeacon 区域监控无法跨设备一致地工作(IBeacon region monitoring not work consistently across devices)
    问题 在使用简单的应用程序测试信标区域监控时,根据设备(不是设备型号,特定设备),我似乎得到了非常不一致的结果。 问题是在requestStateForRegion之后我没有收到该区域的CLRegionStateInside状态,并且在这些设备上根本没有调用didEnterRegion 。 startRangingBeaconsinRegion : 工作正常,但为了节省功率和处理,建议仅在didEnterRegion : 方法被调用时开始测距。 我在 6 台设备上对此进行了测试,它在其中一半(iPhone 5 的)上运行,但在一台 iPhone 5、一台5S和一台4S上不起作用。 我使用的信标是kontakt.io信标。 这是设置区域监控的代码 self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:BEACON_UUID]; CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"regionIdentifier"]
  • 如何在不指定 UUID 的情况下扫描 iBeacon 信号?(How to scan iBeacon signals without specifying UUID?)
    问题 由于 iBeacon 信号只是带有预定义 BLE 配置文件的 BLE 广播,我想我可以编写一个 iOS 应用程序来扫描 BLE 广播信号并分析找到的信号是否是 iBeacon。 但是怎么做呢? 如何扫描周围所有的BLE广播信号? 如何区分一个BLE广播信号是否是iBeacon? 回答1 不幸的是,在 iOS 上你必须提供 ProximityUUID 才能看到 iBeacons。 在 Android 上,无论 UUID 如何,您都可以看到所有 iBeacon。 此外,在 iOS 上,您不能将 CoreBluetooth API 用于 iBeacon 广告。 有关详细信息,请参见此处。 回答2 @davidgyoung 的答案并不完全正确。 在 iOS 上,您可以订阅进入/离开统治,但您必须事先知道 UUID。 但是,您可以使用常规蓝牙设备扫描来检测所有蓝牙设备。 然后,您可以查看广告数据以查看它是否确实在使用 iBeacon 标识符并列出其 iBeacon UUID。 回答3 根据我的说法,您无法找到所有正在广播广告数据的信标,无论它们的接近度 UUID 是多少。 这只能在 Mac 应用程序中完成,不能在 iOS 中完成。 这将帮助您更好地理解单击此处 这是 Mac 工作状态下开源信标扫描应用程序的链接:单击此处
  • 如何在Android设备上读取信标的UDID、Major、Minor?(How to read UDID, Major, Minor of beacon on android devices?)
    问题 我正在尝试为 Android 开发 BLE 应用程序。 有什么方法可以检测和读取Android设备上的信标的UDID、Major、Minor? 我已经阅读了 RadiusNetworks android-ibeacon-service,但我不明白为什么: major = (256 * (0xFF & paramArrayOfByte[(i + 20)]) + (0xFF & paramArrayOfByte[(i + 21)])); 其中paramArrayOfByte是LeScanCallback byte[] scanRecord 回答1 当您从BluetoothAdapter.LeScanCallback获取byte[] scanRecord时,它将包含蓝牙 LE 标头,其长度可以根据 iBeacon 的类型而变化。 由于可变长度的标头,指示 iBeacon 广告 ( 4c 00 02 15 ) 的四个字节可以从第三个字节 ( scanRecord[2] ) 到第六个字节 ( scanRecord[5] ) 的任何位置开始。 在最新的代码,在Android iBeacon显示图书馆找到的索引位置4c 00 02 15的内scanRecord ,并称其为startByte 。 其他所有内容都位于相对于该startByte的固定位置。 回答2
  • 带有BLE加密狗的RaspberryPi是否可以检测iBeacons?(Can RaspberryPi with BLE Dongle detect iBeacons?)
    问题 我从Radius Networks购买了一个开发人员套件,其中包括ioGear GBU521 BLE 4.0 dongle和Raspberry Pi 。 我还购买了他们的RadBeacon iBeacons 。 他们俩都像广告一样工作,但是我对自己得到的东西感到惊讶。 我以为RaspPi可以检测到iBeacons 。 而是将工具包设置为创建iBeacon 。 我的用例是检测forklift何时进入特定房间,以便将工作发送给他们。 我的想法是在叉车上放一个iBeacon,然后放一个RaspPi来搜索iBeacon。 并且当检测到iBeacon(叉车)时,您可以得出结论,它就在附近。 我将RaspPi连接到LAN ,并使其通过REST or similar传达信息。 我知道我可以放入合适的Android or Apple device并以这种方式完成操作,但是我不明白为什么该加密狗无法检测到这些iBeacons并告诉我它们的UUID's是什么? 我想念什么? 回答1 是的! 您可以使用Raspberry Pi扫描iBeacons。 我们在下面组合了一个脚本来执行此操作,您也可以按照以下步骤自己进行操作: 启动进行蓝牙LE扫描的后台进程: sudo hcitool lescan --duplicates & 使用--duplicates设置