草庐IT

ios - 如果我知道 iOS 中该 BLE 设备的 mac 地址,如何区分我应该连接哪个 BLE 设备的外围设备?

coder 2024-01-28 原文

在 iOS 中无法获取 CBPeripheral 对象的 mac 地址。 现在我没有了。具有不同 UUID 但具有相同外设名称的 BLE 设备。用户必须首先通过注册命令向该 BLE 设备注册该 BLE 设备,其 MAC 地址将在二维码扫描时获得。但是我怎样才能知道用户在哪个设备上进行注册,因为在 iOS 中我没有在外围设备中获取 MAC 地址?

最佳答案

正如 Dorian Roy 指出的那样,一个好的基本方法是将 MAC 编码到广告数据包中的制造商特定数据中。 MAC 是 6 个字节,所以如果您还没有在那里存储太多空间,通常应该有空间。如果您的所有设备都具有相同的 OUI(制造商前缀),您通常可以不用低 3 个字节。

实际上,我设计的系统只通告 MAC 的最后一个字节,然后通过连接进行双重检查以获取完整的 MAC。在同一房间内有大约 20 台设备广播之前,您有超过 50% 的机会不发生碰撞。如果同一房间内的设备可能少于 3 台,则发生碰撞的可能性小于 2%(但请记住,这意味着 50 种情况中有 1 种会发生碰撞,因此您不能忽略它)。显然,您包含的字节越多越好。

这个设计有一个微妙的角落案例,对您来说可能重要也可能不重要。该设备可能已经通过 BLE 连接到手机。这可能是由于另一个应用程序(例如 LightBlue)造成的,但也可能是由于您自己的应用程序造成的。假设你连接到一个设备,然后你的应用程序死了,你又重新启动了。该设备可能仍连接到手机的 BLE 系统,并且不会发布广告。您发现该设备的方式是使用 retrieveConnectedPeripherals。但在那种情况下,您将永远看不到广告数据包。如果此 MAC 检查是一次性事件,那么这种情况对您来说可能不是主要问题,但如果客户提示您的应用找不到设备,则需要记住这一点。 (最简单的解决方案是重启设备,如果不可能,则重启手机。)

Paul 关于通过特性公开 MAC 的建议是必要的,但它相对较慢,并且在实践中有点复杂,因为可能有多个设备进行广告。如果可以的话,我通常会从广告数据包开始,并且只连接到可能正确的设备,然后检查它们的特性。连接是昂贵的。只有在您很有可能是正确的情况下才进行连接。

关于ios - 如果我知道 iOS 中该 BLE 设备的 mac 地址,如何区分我应该连接哪个 BLE 设备的外围设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54198616/

有关ios - 如果我知道 iOS 中该 BLE 设备的 mac 地址,如何区分我应该连接哪个 BLE 设备的外围设备?的更多相关文章

  1. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  2. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  3. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  4. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  5. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  6. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  7. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  8. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  9. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  10. ruby-on-rails - 如何在 mac os snow leopard 中升级 ruby​​ 和 rails - 2

    我想将我的MacSnowLeopardruby​​从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai

随机推荐