在 iOS 中获取蓝牙低功耗外设的 MAC 地址

2023-12-25

我目前正在开发一个基于蓝牙低功耗设备的 iOS 应用程序。为了获得唯一的标识符来比较所获得的外设,我必须获取外设的 MAC 地址。

据观察,外围设备的 UUID 属性在不同的 iOS 设备上有所不同,并且外围设备要获得 UUID,它必须至少连接到主设备一次。由于我必须处理登机手续,因此我不想建立连接。当我浏览蓝牙服务门户时,我发现设备信息本身就是一项服务,除非在主 iOS 设备和外围蓝牙低功耗设备之间建立连接,否则无法检索该服务。

我发现在 Android 中,当我们收到设备扫描自身的响应时,我们可以获得设备的全部信息,包括其 MAC 地址(使用 getAddress())。

我在 CBPeripheral 类中没有找到与设备地址相关的任何属性。 获取唯一参数的另一种方法是自定义广告数据以发送有关设备的附加信息,这需要在固件方面进行更多工作。

那么,在 iOS 中,有什么方法可以让我在不建立连接的情况下获取蓝牙低功耗外设的 MAC 地址吗?

任何帮助将不胜感激。


CBPeripheral 的标识符属性将满足您的目的,可从 CBCentralManager 的 didDiscoverPeripheral 委托方法中的仍未连接的设备获取:

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

CBPeripheral *peripheral ...

NSUUID* serverId = [peripheral identifier];

我正在试验六台 LE 设备,其中包括多组相同的设备。我刚刚确认,在两个 iOS 设备上,所有这些 LE 小部件的标识符都是不同的,但对于每个 iOS 设备,每个小部件的标识符在应用程序启动甚至应用程序删除和重新安装期间都会保留。我想说,这明确证明操作系统在内部存储了足够的信息,对于给定的 iThing,您将能够区分并重新识别应用程序遇到的所有外围设备,而无需实际连接到它们。 另请注意,advertisementData,也可以在连接之前使用,其中充满了有用的信息,例如CBAdvertisementDataLocalNameKey, CBAdvertisementDataManufacturerDataKey, CBAdvertisementDataServiceUUIDsKey, CBAdvertisementDataSolicitedServiceUUIDsKey等,尽管没有一个像[外设标识符]那样能够唯一地标识设备。

我没有尝试进行设备备份和恢复来证明 UUID 已保留,但我敢打赌它们是保留的,如果没有,Apple 会认为这是一个错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iOS 中获取蓝牙低功耗外设的 MAC 地址 的相关文章

随机推荐

  • JavaScript检测父框架是否同源?

    我正在寻找一种跨浏览器的方法来检测父框架是否与我的框架同源 最好不要在 JavaScript 错误控制台上打印警告 以下似乎可行 但我想避免在控制台上打印错误 至少 Safari 和 Chrome 在访问父框架上的 location hre
  • 衡量 JavaScript 性能

    我正在尝试对我们的前端进行全面分析 我想知道是否有任何工具可以自动测量 Javascript Eg 执行函数 不需要我在记录之前 之后手动放置日期对象 我页面上的哪个脚本最慢以及原因 找出我需要优化哪些功能 Are there any jQ
  • Flutter:热重载后出现“与设备连接丢失”错误

    这是调试控制台中的完整错误 Launching lib main dart on Android SDK built for x86 in debug mode Built build app outputs apk debug app d
  • 如何使用 Leaflet 一次只允许编辑一个要素/多边形?

    这几天我一直在努力解决我的问题 我有一个来自 GeoJSON 的多边形层 我想通过单击事件编辑多边形 当我单击一个多边形时 它变得可编辑 但我想要的是 当我单击另一个多边形时 第一个多边形不再处于可编辑模式 OpenLayers自然没有Le
  • Angular4 APP_INITIALIZER 不会延迟初始化

    打字稿 2 2 0 角度 4 0 我试图确保ConfigService对象在应用程序启动之前通过使用进行初始化APP INITIALIZER 我找到了许多如何执行此操作的示例 但是它们似乎都没有延迟应用程序的初始化 这里只是我尝试实现的几个
  • Shiny:可以做垂直滑块吗?

    有没有可能在Shiny中制作垂直滑块 我基本上想要一个图 在其左侧有一个垂直滑块 在其下方有一个普通的水平滑块 现在就很容易了noUiSliderInput 来自闪亮小部件 https rdrr io github dreamRs shin
  • 在模态弹出窗口中编辑网格视图而不关闭弹出窗口

    我有一个模式弹出窗口 使用 ModalPopupExtender 在网格的主 详细视图中工作 当您单击一个网格上的按钮时 它会显示一个弹出窗口 其中包含另一个网格的信息 基于在第一个网格中单击的行 这很好用 我已经在弹出的网格中启用了编辑
  • 喷气背包组合中的渐变线颜色

    我想在 jetpack compose 中绘制渐变线 我尝试了一些代码 但它不符合我的预期 预期输出 实际产量 Code Preview showBackground true Composable fun DrawTimeLine Col
  • AngularJS 可与哪些浏览器配合使用?

    这可能是一个最常见的问题 但没有任何关于浏览器版本的线索 而且 角度站点 https docs angularjs org misc faq what browsers does angularjs work with 其本身如下所述 An
  • 在列表视图中添加不同类型的项目

    是否有一个很好的教程或链接显示如何将不同的项目添加到列表视图 例如 一加二文本行 and a 复选框 另一个你只需按下 就会弹出一些东西 我现在所拥有的是每个列表项都是相同的两行文本视图和复选框 Or 如果有办法通过不同的布局一次添加 1
  • -webkit-transform 在 Internet Explorer 中不起作用

    我发现 webkit transform rotateZ 10deg 在 Internet Explorer 9 中不起作用 可以使用什么来代替 CSS3 你有没有尝试过 ms transform rotateZ 10deg As webk
  • 打印图像c#.net

    我在 PictureBox 中有一张图像 我想打印它 无需格式化 无需任何操作 只需打印即可 我一直在谷歌上搜索 但一无所获 只有人们打印表格 文本或报告 private string imgSrc public string ImgSrc
  • jMeter 未将变量应用于标头管理器

    我在 Mac 上使用 Apache JMeter 3 2 r1790748 我有一个setUp Thread Group进行身份验证调用 该调用有效并正确输出令牌 现在我需要将该令牌传递给HTTP Header Manager我拨打的所有电
  • 如何模拟私有 dao 变量?

    我有一个dao create 在测试方法时调用我想要模拟的方法 但我错过了一些东西 因为我仍然得到 NPE 这里有什么问题吗 class MyService Inject private Dao dao public void myMeth
  • 如何关闭特定列的 ag-grid 快速过滤器

    AG grid 有 快速过滤 https www ag grid com javascript grid filter quick 功能 本质上是一个搜索所有列的自由文本搜索过滤器 问题是 在某些列中 我有日期时间值 但我不想搜索这些列中的
  • 在 linq 中选择两列之间的最大值

    我在产品表中有 dateSend 列和 dateEdit 列 我可以使用以下代码选择 max dateSend from pro in Products ToList select new pro DateSend Max 但我在 date
  • PHP 的 var_dump / print_r 输出是乱码 - 编码问题?

    我遇到的问题是服务器上的输出var dump and print r出来完全是乱码 print r输出纯粹的乱码 例如 W 8 等 同时var dump至少给出string 1664 后面是类似的胡言乱语 尽管这次用双引号引起来 这看起来像
  • 聚合广告点击次数和浏览次数

    下表跟踪每个广告系列的点击次数和浏览次数 record id advert id type 1 100 click 2 102 click 3 100 view 4 100 view 5 102 view 6 100 view 7 101
  • 如何在 git 中显示标签的完整历史记录?

    git 中的标签显然可以通过简单地删除它们然后重新标记来从一个提交移动到另一个提交 例如 git tag m Version 1 0 v1 0 abcd123 git push tags git tag d v1 0 git tag m C
  • 在 iOS 中获取蓝牙低功耗外设的 MAC 地址

    我目前正在开发一个基于蓝牙低功耗设备的 iOS 应用程序 为了获得唯一的标识符来比较所获得的外设 我必须获取外设的 MAC 地址 据观察 外围设备的 UUID 属性在不同的 iOS 设备上有所不同 并且外围设备要获得 UUID 它必须至少连